在過去的幾周中,閱讀了許多問題/答案后,我發現\d在perl正則表達式中使用注釋不正確。與在更高版本的perl中不同的\d是[0-9],\d它將代表具有digit屬性的任何Unicode字符,并且[0-9]代表字符'0','1','2',...,'9'。我欣賞在某些情況下[0-9]將是正確的用法,而在其他情況下將是正確的用法\d。我想知道哪個人認為使用的是正確的默認設置?就我個人而言,我覺得這種\d表達方式非常簡潔和富有表現力,而相比之下,[0-9]則顯得有些笨拙。但是我幾乎沒有做多語言代碼的經驗,或者說對于不適合ASCII字符范圍的語言的代碼,因此可能很幼稚。我注意到$find /System/Library/Perl/5.8.8/ -name \*pm | xargs grep '\\d' | wc -l 298$find /System/Library/Perl/5.8.8/ -name \*pm | xargs grep '\[0-9\]' | wc -l 26
3 回答

一只萌萌小番薯
TA貢獻1795條經驗 獲得超7個贊
為了最大程度的安全,我建議[0-9]
您在不特別希望匹配所有unicode定義的數字的情況下使用。
每的perldoc perluniintro,Perl不支持使用比其他數字[0-9]
的號碼,所以我肯定會使用[0-9]
如果以下都為真:
您希望將結果用作數字(例如,對其執行數學運算或將其存儲在僅接受適當數字的位置(例如,數據庫中的INT列))。
非數字
[^0-9]
可能以正則表達式可以匹配它們的方式出現在數據中。(請注意,對于不受信任/敵對的輸入,應始終將此選項視為true。)
如果其中任何一個為假,則幾乎沒有理由專門不使用它\d
(并且您可能會知道何時是這種情況),并且如果您嘗試匹配所有Unicode定義的數字,則說明我一定要用\d
。

慕尼黑5688855
TA貢獻1848條經驗 獲得超2個贊
根據perlreref的說法,“ \d”是可識別語言環境和Unicode的。
但是,如果您使用的代碼集不是Unicode,則無需擔心Unicode數字,并且如果您使用的代碼集類似于Latin-1(ISO 8859-1或8859-15),則因為代碼集不包含任何其他數字字符,所以區域設置意識也不會傷害您。
因此,對于許多人來說,在很多時候,您可以\d不用擔心而使用' '。但是,如果Unicode數據是您工作的一部分,那么您需要更仔細地考慮要做什么。
- 3 回答
- 0 關注
- 1256 瀏覽
添加回答
舉報
0/150
提交
取消