我正在尝试将Python脚本转换为PHP。
以下2个正则表达式在Python中工作:
'/'*'*(['w'n'(')'[']'.'*'''"'-#|,@{}_<>=:/ ]+?)'*/'
'(?:'* (['w'd'('),'.'''"'-':#|/ ]+)|(?<= @)('w+)(?: (.+))?)'
…然而,如果我尝试在PHP中运行它们,我得到:
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier ']'
如何来吗?
原因是PHP希望在其正则表达式周围使用分隔符,因此它将第一个和第二个斜杠视为分隔符,并尝试将后面的内容解析为修饰符。
用新的分隔符包围你的regex,然后再试一次(我还删除了一些不必要的反斜杠):
'%/'*'*(['w'n()'['].*''"#|,@{}_<>=:/ -]+?)'*/%'
'%(?:'* (['w'd(),.''"':#|/ -]+)|(?<= @)('w+)(?: (.+))?)%'
提示:使用RegexBuddy来做这些事情。它将接受用语言a编写的正则表达式,并为您将其转换为语言B。
PCRE(包括preg_match_all
)需要一个模式边界。您需要在/
、@
、#
、%
或许多其他可能的选项中包装整个模式。我建议%
,因为它看起来不像你在使用它的任何模式,即:
%(?:'* (['w'd'('),'.'''"'-':#|/ ]+)|(?<= @)('w+)(?: (.+))?)%