Php和python正则表达式的区别?

时间:2010-05-26 14:01:25

标签: php python regex

我需要解析字符串'Open URN: 100000 LA: '并从中获取100000。 在python regexp (?<=Open URN: )[0-9]+(?= LA:)上运行正常,但在php中它会出现以下错误:

preg_match(): Unknown modifier '['

我需要它工作php,所以请帮我解决这个问题,并告诉python和php regexps的区别。

2 个答案:

答案 0 :(得分:3)

当您使用PHP中的delimitersPerl Compatible Regular Expressions (PCRE) functions所属的)时,您必须使用preg_match()

来自documentation

  

使用PCRE功能时,需要将模式包含在 分隔符 中。分隔符可以是任何非字母数字,非反斜杠,非空白字符。

使用分隔符的原因是您可以在最后一个分隔符后添加pattern modifiers,例如进行不区分大小写的匹配:

#[a-z]#i  // # is the delimiter.

回到你的问题:

在您的情况下,PHP认为括号()是您的分隔符(是的,开始和结束括号是有效的分隔符,请参阅documentation),?<=Open URN:是您的模式。然后遇到[并将其视为pattern modifier,但它不是有效的。

带分隔符的模式%

preg_match('%(?<=Open URN: )[0-9]+(?= LA:)%', 'Open URN: 100000 LA: ');

documentation of preg_match()

中有很多例子

Python与PHP

我在Python中找到的关于正则表达式的唯一内容是Perl syntax is used,但我不知道是否支持完整语法。
如前所述,PHP使用PCRE。 Description of the differences between PCRE and Perl regex.

答案 1 :(得分:1)

除了提到的差异,我发现了另外一个。 python中的re.match(r“\ s”,“a b”)与preg_match(“/ \ s /”,“a b”),第一个不返回python中的匹配,而第二个将找到空格符号。我没有在官方文档中找到原因,但很难理解,但这是事实。