当前尝试将注释与正则表达式匹配,但前提是没有函数跟随。目前我使用的正则表达式也匹配关键字函数。然后检查源代码(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
似乎您需要更好地了解回溯是如何工作的,使用.*?
而不是.*
意味着正则表达式引擎将首先尝试匹配之前.*
之后的所有内容,但是负前瞻使匹配失败并.*
继续匹配。在回溯之后,使用((?!\*\/).)*
不能匹配\*\/
而.*?
可以。另一种解决方案是使用 atomic group (?>\/\*\*.*?\*\/)(?!\s*function)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句