我需要解析字符串'Open URN: 100000 LA: '
并从中获取100000。
在python regexp (?<=Open URN: )[0-9]+(?= LA:)
上运行正常,但在php中它会出现以下错误:
preg_match(): Unknown modifier '['
我需要它工作php,所以请帮我解决这个问题,并告诉python和php regexps的区别。
答案 0 :(得分:3)
当您使用PHP中的delimiters(Perl Compatible Regular Expressions (PCRE) functions所属的)时,您必须使用preg_match()
。
使用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: ');
中有很多例子
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中的匹配,而第二个将找到空格符号。我没有在官方文档中找到原因,但很难理解,但这是事实。