我看一些旧的PERL/CGI代码来调试问题,并注意到很多用途:
\d - Match non-digit character
\D - Match digit character
Run Code Online (Sandbox Code Playgroud)
大多数在线文档都提到\ d与[0-9]相同,这是我一直认为的.但是,我也注意到Stackoverflow问题提到了字符集的差异.
\ d是否也匹配减号和/或小数点?
我要去做一些测试了.
我不知道Perl如何确定默认情况下是使用Unicode还是ASCII或语言环境(没有标志,没有use).无论如何,通过声明use re '/a';(ASCII),或use re '/u';(Unicode)或use re '/l';(语言环境),您将向Perl解释器(和人类读者)清楚地表明您要使用哪种模式并避免意外行为.
由于修饰符的作用,\d至少有2个含义:
/a标志(ASCII),\d将匹配位数从0到9(不多也少).在/u标志(Unicode)的影响下,\d将匹配任何语言中的任何十进制数字,并且等同于\p{Digit}引用.这实际上使得使用\d+相当无用且危险,因为它允许任何语言的数字混合.
引用/u国旗的描述
并且,
\d+可以匹配来自不同书写系统的混合数字串,从而产生安全问题.num() in Unicode::UCD可以用来解决这个问题.或者/a修饰符可用于强制\d仅匹配ASCII 0到9.
\d将不匹配任何符号或标点符号,因为这些字符不属于Nd(数字,十进制数字)Unicode的常规类别.
| 归档时间: |
|
| 查看次数: |
3037 次 |
| 最近记录: |