Does regular expression d match minus sign and/or decimal point?
我看了一些旧的perl/cgi代码来调试一个问题,并注意到了以下许多用法:
1 2 | \d - Match non-digit character \D - Match digit character |
大多数在线文档都提到d与[0-9]相同,这是我一直认为的。但是,我也注意到stackoverflow问题提到了字符集差异。
regex中的"d"是指数字吗?
d是否也匹配减号和/或小数点?
我要去做些测试。
Does \d also match a minus sign and/or decimal point?
不
我不知道Perl如何确定默认情况下是否使用Unicode、ASCII或区域设置(没有标志,没有
由于修饰语的作用,
- 在
/a 标志(ASCII)的作用下,\d 将匹配0 到9 的数字(不多不少)。 在
/u 标志(unicode)的作用下,\d 将匹配任何语言中的任何十进制数字,并等同于\p{Digit} 参考。这实际上使\d+ 相当无用,而且使用起来很危险,因为它允许在任何语言中混合数字。引自
/u 标志说明
And,
\d+ , may match strings of digits that are a mixture from different writing systems, creating a security issue.num() in Unicode::UCD can be used to sort this out. Or the/a modifier can be used to force\d to match just the ASCII 0 through 9.
答案是否定的。它只做一个数字检查。然而,Unicode使事情变得更加复杂。
如果您想确保某个值是一个数字——一个十进制数字——请查看scalar::util模块。它具有的功能之一是
这个模块已经成为标准Perl的一部分有一段时间了,所以您应该在系统上使用它。