Python 正则表达式转换为 PHP?

3 投票
2 回答
1443 浏览
提问于 2025-04-16 23:04

我正在尝试把一个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。

撰写回答