在过去的几周中,阅读了许多问题/答案后,我发现\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 关注
- 1168 浏览
添加回答
举报
0/150
提交
取消