这两个正则表达式之间有什么区别?(使用php preg_match())
/^[0-9\x{06F0}-\x{06F9}]{1,}$/u
/^[0-9\x{06F0}-\x{06F9}\x]{1,}$/u
第二种模式中最后\x
的含义是什么?
答案 0 :(得分:4)
它被解释为\x00
(空字符),但几乎可以肯定是由于草率编辑或复制和粘贴而导致的错误。
答案 1 :(得分:1)
http://www.regular-expressions.info/unicode.html
...因为\ x本身不是有效的正则表达式令牌......
答案 2 :(得分:0)
我认为第二种模式无效。
根据此页面http://www.regular-expressions.info/unicode.html,\ x仅用于后跟unicode编号:
由于\ x本身不是有效的正则表达式标记,因此\ x {1234}永远不会 困惑地匹配\ x 1234次。
答案 3 :(得分:0)
这很奇怪。 unicode字符的Php表示法是\ x {}。在perl中,它是一回事。
但是php在正则表达式中有// u修饰符。我认为这意味着unicode。 perl中没有这样的修饰符。
在perl regex中,\ x ##被解析,其中##表示ascii字符。如果它是\ x或\ x#,则忽略非法十六进制数字的警告(因为它需要2位数,不多不少)并且它只接受序列中的有效十六进制数字。如果你没有\ x中的数字,它使用\ 0 ascii char等..
但是,任何\ x {}符号都可以,\ x {0}等同于\ x {}。并且\ x {0} - \ x {ff}被视为ascii,\ x {100} - 被视为unicode。
因此,\ x是一个有效的十六进制/ unicode转义序列,但它本身是asumed十六进制并且是不完整的,可能不应该留给解析器默认机制。
答案 4 :(得分:0)
据我所知,第二个\x
实际上是一个无效字符。两个表达都有用吗?