什么是这两个正则表达式的区别?(使用PHP的preg_match())这两个正则表达式之间的区别?
/^[0-9\x{06F0}-\x{06F9}]{1,}$/u
/^[0-9\x{06F0}-\x{06F9}\x]{1,}$/u
什么是最后\x
在第二图案的含义是什么?
什么是这两个正则表达式的区别?(使用PHP的preg_match())这两个正则表达式之间的区别?
/^[0-9\x{06F0}-\x{06F9}]{1,}$/u
/^[0-9\x{06F0}-\x{06F9}\x]{1,}$/u
什么是最后\x
在第二图案的含义是什么?
它被解释为\x00
(空字符),但它几乎肯定是由于草草编辑或复制和粘贴导致的错误。
http://www.regular-expressions.info/unicode.html
...由于\ X本身并不是一个有效的正则表达式令牌......
我认为第二个模式是无效的。
根据http://www.regular-expressions.info/unicode.html此页面中,\ x被唯一有用其次是Unicode数字:
由于\ X本身并不是一个有效的正则表达式令牌,\ X {1234}永远不能 困惑匹配\ x 1234次。
这很奇怪。一个unicode字符的Php表示法是\ x {}。在perl中,它是一样的。
但是php在正则表达式中有// u修饰符。我认为这意味着unicode。在perl中没有这样的修饰符。
在perl正则表达式中,\ x ##被解析,其中##需要表示一个ascii字符。如果它的\ x或\ x#忽略了非法十六进制数字的警告(因为它需要2位数字,则不会少于这个数字),并且它只需要序列中的有效十六进制数字。如果\ x中没有数字,则使用\ 0 ascii char等。
但是,任何\ x {}符号都可以,\ x {0}等同于\ x {}。并且\ x {ff}被认为是ASCII码,\ x {100} - 被认为是unicode。
因此,\ x是一个有效的十六进制/ Unicode转义序列,但其本身就是其假设的十六进制,并且是不完整的,可能不应该留给解析器默认机制。
据我所知,第二个\x
实际上是一个无效的字符。这两个表达式都有效吗
Perl确实有'/ u'正则表达式修饰符... – hobbs
@hobbs - 感谢您的高举。我的5.10版具有/ imsxpgc,5.14/adlu -/imsxadlupgc中的新功能。旧版本的升级到Unicode规则可以通过目标或模式UTF-8编码或平台自动进行。所以/ \ x {100}/u似乎是多余的,除非显然(?u:)是可能的。我不知道现在双方的自动推广会发生什么。 5.10确实存在已修复的错误,所以我可能会升级。 – sln