当前正在尝试将注释与正则表达式匹配,但前提是后面没有函数。 目前我使用的正则表达式也与关键字函数匹配。 然后检查源代码(php)是否设置了该组。
/\/\*\*.*?\*\/\s*(function)?/sg
https://regex101.com/r/l0j1ip/1
现在的问题是是否可以用纯正则表达式来实现。 我已经尝试过简单的否定前瞻,但没有成功。 虽然不再单独发表评论,但只是与后续评论一起发表。
/\/\*\*.*?\*\/\s*(?!function)/sg
https://regex101.com/r/PuUUw6/1
接下来我尝试了非捕获组。但也有没有成功。
/(?:\/\*\*.*?\*\/\s*function)|\/\*\*.*?\*\/\s*/sg
https://regex101.com/r/wkQE7E/1
在评论了信息(*SKIP)(*FAIL)后,我也尝试了但没有成功。 跳过此关键字之上的所有匹配项。单个匹配项也会被跳过。
/\/\*\*.*?\*\/\s*function(*SKIP)(*FAIL)|\/\*\*.*?\*\//sg
最佳答案
再次阅读问题后,使用否定前瞻应该是可行的;重复必须位于否定表达式内:
/\/\*\*((?!\*\/).)*\*\/(?!\s*function)/sg
似乎您需要更好地了解回溯的工作原理,使用 .*?
而不是 .*
意味着正则表达式引擎将首先尝试匹配 之后的所有内容.*
然而,否定的前瞻会使匹配失败,并且 .*
继续匹配。使用 ((?!\*\/).)*
不能匹配 \*\/
而 .*?
可以,回溯后。
另一种解决方案是使用原子组 (?>\/\*\*.*?\*\/)(?!\s*function)
。
关于php - 如果正则表达式后面跟着空格和关键字,则跳过匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68205696/