Python 正则表达式转换为 PHP?
我正在尝试把一个Python脚本转换成PHP。
下面这两个正则表达式在Python中可以正常工作:
'/\*\*([\w\n\(\)\[\]\.\*\'\"\-#|,@{}_<>=:/ ]+?)\*/'
'(?:\* ([\w\d\(\),\.\'\"\-\:#|/ ]+)|(?<= @)(\w+)(?: (.+))?)'
...但是,如果我在PHP中运行它们,就会出现:
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier ']'
这是为什么呢?
2 个回答
1
PCRE(包括 preg_match_all
)需要一个模式边界。也就是说,你需要把整个模式用 /
、@
、#
、%
或其他很多可能的符号包起来。我建议用 %
,因为在你的模式中看起来并没有用到这个符号。也就是说,你可以这样写:
%(?:\* ([\w\d\(\),\.\'\"\-\:#|/ ]+)|(?<= @)(\w+)(?: (.+))?)%
1
原因是PHP在处理正则表达式时需要有分隔符,所以它把第一个和第二个斜杠当作分隔符,接着就试图把后面的内容当作修饰符来解析。
你可以用新的分隔符把你的正则表达式包起来,然后再试一次(我也去掉了一些不必要的反斜杠):
'%/\*\*([\w\n()\[\].*\'"#|,@{}_<>=:/ -]+?)\*/%'
'%(?:\* ([\w\d(),.\'"\:#|/ -]+)|(?<= @)(\w+)(?: (.+))?)%'
提示:可以使用RegexBuddy来处理这些事情。它可以把用语言A写的正则表达式转换成语言B。