Should I use d or [0-9] to match digits in a Perl regex?
在过去几周阅读了大量的问题/答案后,我发现在perl正则表达式中使用
我很感激在某些情况下,使用
就我个人而言,我发现
我注意到了
1 2 3 4 |
在我看来,使用
以前的大多数海报都已经强调了为什么你应该使用
如果我正确地阅读了Unicode图表,"
?? "是一个数字(70的印度语,不要相信我的话)。试试这个:
1
2$ perl -le '$one = chr 0xFF11; print"$one + 1 =", $one+1;'
1 + 1 = 1以下是有效数字的部分列表(根据您使用的字体,这些数字可能会显示在浏览器中,也可能不会显示在浏览器中),对于每个数字,在使用Perl进行算术运算时,只有第一个数字被解释为数字,如上所示:
1
2
3
4
5
6
7
8
9
10ZERO: 0??????????????0
ONE: 1??????????????1
TWO: 2??????????????2
THREE: 3??????????????3
FOUR: 4??????????????4
FIVE: 5??????????????5
SIX: 6??????????????6
SEVEN: 7??????????????7
EIGHT: 8??????????????8
NINE: 9??????????????9??
你还不相信吗?
为最大安全,我会建议使用
每perldoc perluniintro地点,不支持使用Perl做为其他煤炭
你想使用的结果作为一个编号(如进行数学在它或它的作战storing某处,只有接受适当数量(例如安全列在一个数据库int))。
它是可能的非
如果这是要么是false,将只有很少有特别的理由不使用
根据perlreref,
然而,如果你是使用的codeset不是Unicode,然后你不需要担心关于Unicode的地点,如果你是使用的是什么codeset像拉丁语1(ISO 8859 - 1,或8859 15),然后一个宣传的locale不会伤害你-无论是因为codeset不包括对其他任何位数的特点。
所以,对于许多人,多的时间,你可以使用"
就像nuking网站从
作为为他们的头的人在美国ducking说这并不影响他们是今天使用的字符集,以及使用字符集,你可能今天,但其余的世界是现在使用UTF-8,你将很快使用它为好。记得大像的家伙谁maintains代码的代码是一个homicidal maniac谁知道在你的生活。
哦,和作为modules
如果你做任何位数的平均情况,但要成为能与自由的数学结果,你可以使用
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/perl use strict; use warnings; use Text::Unidecode; my $number ="\x{1811}\x{1812}\x{1813}\x{1814}\x{1815}"; print"$number is", unidecode($number)," "; |
它看起来像一些更多的测试后不unidecode文本:所有位数的基础上正确处理的特点。我是写作的一个模块,将工作。
我感觉都必须有他们的地方。然而,99.999%的时间(尤其是在美国的世界封闭的大合作,他们是interchangeable)。我每天使用Perl中用来操纵数据的大数据集,在所有与我交易的数量,是有别fit在
如果你到一个Unicode应用
所以我的建议是:只有付出注意力的差异之间的
如果
随着数据格式控制的增加,对模式特异性的需求下降…
例如,如果您匹配的数据是由机器生成的,并且始终遵循相同的输出格式规则,则不需要如此精确。获取IPv4地址。如果您试图从路由器接口配置行中提取IP地址,那么您真正需要的就是:
1 | 'ip\haddress\h(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\D' |
另一方面,如果你试图在某个地方找到一个IP地址,比如电子邮件的X头,或者如果你试图验证一个IP地址,那么……这是一个完整的"另一个故事"!