REGEX在PHP和Python中有区别吗
我发现了这个帖子:Python 正则表达式与 PHP 正则表达式,但我其实不太明白 Python 的正则表达式语法和 PHP 的正则表达式语法是否一致。
我开始把一些旧的 PHP 代码转换成 Python(因为使用了 g 的 appengine 等等),现在我想知道正则表达式是否可以完全通过简单的复制和粘贴来转换。
祝好,
6 个回答
1
11
大部分情况下,它们是兼容的。不过,除了语法不同(比如PHP用/regex/
,而Python用re.compile(r"regex")
)之外,还有一些区别:
- PCRE支持
\Q...E
来转义特殊字符,而Python不支持。 - PCRE支持
\cA-\cZ
来匹配控制字符,Python不支持。 - 在PHP中,
[\d-z]
或[a-\d]
中的连字符是字面意思,而在Python中不是。 - PCRE支持
\z
(字符串结束),而Python只支持\Z
(在可选的最后换行符之前的字符串结束)。 - 在PCRE中,
\b
只会匹配ASCII字符的词边界,而在Python中,如果设置了选项,它可以根据地区匹配。 - 在PCRE中,你可以在捕获括号之前引用
\1
等回溯引用,而在Python中不可以。 - 在Python中,你不能在正则表达式中关闭模式修饰符(比如
(?-s)
等)。 - Python中没有原子分组
(?>...)
或占有量词.++
,这些只有在PCRE中才有。 - 在PCRE中,后向查找可以是有限长度,而在Python中必须是固定长度。
- 没有
\G
模式(上一个匹配的位置)。 - Python中没有条件匹配,只有在PCRE中可以使用:
(?(?=regex)then|else)
。 - Python中没有
\x1234
来匹配Unicode代码点,也没有p{L}
和其他Unicode属性匹配。在PHP中,这取决于它的配置/编译方式。 - Python中没有
[:alpha:]
的POSIX字符类。
这些信息来自于regular-expressions.info,省略了一些比较冷门的内容,但没有省略太多。
总结:买一个RegexBuddy,用它来帮你翻译正则表达式。
13
Python的语法和Perl的语法很像,而PHP使用的是与Perl兼容的正则表达式语法,所以这两者应该差不多。你可以了解一下可能的不同之处。
唯一真正的区别是,在PHP中,表达式必须用分隔符包起来。