我发现这篇文章:Python Regex vs PHP Regex但是如果Python的REGEX语法与PHP的REGEX语法匹配,我实际上没有得到。
我开始将一些旧的PHP代码转换为python(由于g的appengine等),现在我想知道正则表达式是100%可转换的,通过简单的复制&糊。
的问候,
答案 0 :(得分:9)
Python使用类似于Perl语法的语法,PHP使用Perl Compatible Regular Expressions语法,因此它应该几乎相同。了解可能的differences。
唯一真正的区别是,在PHP中,表达式必须包含在delimiters。
中答案 1 :(得分:9)
它们大部分兼容。但是,除了不同的语法(PHP中的/regex/
与Python中的re.compile(r"regex")
)之外,还有一些差异:
\Q...E
来逃避元字符,Python不支持。\cA-\cZ
控制字符匹配,而Python不支持。[\d-z]
或[a-\d]
中的连字符是PHP中的字面值,而不是Python中的字面值。\z
(字符串结束),Python不支持\Z
(可选的最终换行符之前的字符串结尾)。\b
仅匹配PCRE中ASCII字符的字边界,在Python中,如果设置了该选项,它可以与区域设置相匹配。\1
等反向引用,但不能在Python中使用。(?-s)
等)中的模式修饰符。(?>...)
或占有量词(.++
),仅在PCRE中。\G
模式(上一场比赛的位置)。(?(?=regex)then|else)
。\x1234
。也没有p{L}
和其他Unicode属性匹配。在PHP中,它取决于它的配置/编译方式。[:alpha:]
POSIX字符类。从regular-expressions.info收集,遗漏了一些更深奥的东西。但并不多。
道德:购买RegexBuddy并使用它为您翻译正则表达式。
答案 2 :(得分:1)
我相信它们至少大部分兼容,即> 2/3。双方可能会有一些特定于语言的扩展,但核心肯定是相同的。这种说法完全基于我(有限的)个人经历,所以请耐心等待。
如果我没弄错的话,两种实现都基于Perl正则表达式。
答案 3 :(得分:1)
答案 4 :(得分:1)
经过非常快速的研究,我发现主要区别在于:
PHP (有分隔符)
/ REGEX / # "/" in front and at the end
Python (没有分隔符)
REGEX # no surrounding by any characters
答案 5 :(得分:1)
即使一般语法相同,构建成各种语言的正则表达式引擎通常也会有差异。 PHP发生时内置了多个正则表达式引擎(POSIX和PCRE),因此根据您使用的正则表达式函数将取决于它们的转换效果。
如果你主要使用preg_*
函数,那么那些应该主要转换而没有问题,但我相信正则表达式的python实现缺少PHP实现中包含的一些更高级的功能。
您可以阅读有关PHP's regular expressions here和Python's regular expressions here的信息,并找出更具体的内容。
很好的问题,但很难给出完整的答案,因为有很多变数。