REGEX是否因PHP而异

时间:2010-06-18 14:53:34

标签: php python regex

我发现这篇文章:Python Regex vs PHP Regex但是如果Python的REGEX语法与PHP的REGEX语法匹配,我实际上没有得到。

我开始将一些旧的PHP代码转换为python(由于g的appengine等),现在我想知道正则表达式是100%可转换的,通过简单的复制&糊。

的问候,

6 个答案:

答案 0 :(得分:9)

Python使用类似于Perl语法的语法,PHP使用Perl Compatible Regular Expressions语法,因此它应该几乎相同。了解可能的differences

唯一真正的区别是,在PHP中,表达式必须包含在delimiters

答案 1 :(得分:9)

它们大部分兼容。但是,除了不同的语法(PHP中的/regex/与Python中的re.compile(r"regex"))之外,还有一些差异:

  1. PCRE支持\Q...E来逃避元字符,Python不支持。
  2. PCRE支持\cA-\cZ控制字符匹配,而Python不支持。
  3. [\d-z][a-\d]中的连字符是PHP中的字面值,而不是Python中的字面值。
  4. PCRE支持\z(字符串结束),Python不支持\Z(可选的最终换行符之前的字符串结尾)。
  5. \b仅匹配PCRE中ASCII字符的字边界,在Python中,如果设置了该选项,它可以与区域设置相匹配。
  6. 您可以在PCRE中捕获括号之前参考\1等反向引用,但不能在Python中使用。
  7. 您无法在Python中关闭正则表达式((?-s)等)中的模式修饰符。
  8. 您不会在Python中获得原子分组(?>...)或占有量词(.++),仅在PCRE中。
  9. Lookbehind在PCRE中可以是有限长度,在Python中必须是固定长度的。
  10. 没有\G模式(上一场比赛的位置)。
  11. Python中没有条件匹配,只有PCRE:(?(?=regex)then|else)
  12. 对于Python中匹配的Unicode代码点,没有\x1234。也没有p{L}和其他Unicode属性匹配。在PHP中,它取决于它的配置/编译方式。
  13. Python中没有[:alpha:] POSIX字符类。
  14. regular-expressions.info收集,遗漏了一些更深奥的东西。但并不多。

    道德:购买RegexBuddy并使用它为您翻译正则表达式。

答案 2 :(得分:1)

我相信它们至少大部分兼容,即> 2/3。双方可能会有一些特定于语言的扩展,但核心肯定是相同的。这种说法完全基于我(有限的)个人经历,所以请耐心等待。

如果我没弄错的话,两种实现都基于Perl正则表达式。

答案 3 :(得分:1)

不确定是否正确答案,但我找到了一个很好的工具,可以帮助您进行测试。

http://re.dabase.com/

干杯!

答案 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 herePython's regular expressions here的信息,并找出更具体的内容。

很好的问题,但很难给出完整的答案,因为有很多变数。