php - 如果正则表达式后面跟着空格和关键字,则跳过匹配

标签 php regex regex-negation

当前正在尝试将注释与正则表达式匹配,但前提是后面没有函数。 目前我使用的正则表达式也与关键字函数匹配。 然后检查源代码(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

https://regex101.com/r/OJSFrF/1

最佳答案

再次阅读问题后,使用否定前瞻应该是可行的;重复必须位于否定表达式内:

/\/\*\*((?!\*\/).)*\*\/(?!\s*function)/sg

似乎您需要更好地了解回溯的工作原理,使用 .*? 而不是 .* 意味着正则表达式引擎将首先尝试匹配 之后的所有内容.* 然而,否定的前瞻会使匹配失败,并且 .* 继续匹配。使用 ((?!\*\/).)* 不能匹配 \*\/.*? 可以,回溯后。 另一种解决方案是使用原子组 (?>\/\*\*.*?\*\/)(?!\s*function)

关于php - 如果正则表达式后面跟着空格和关键字,则跳过匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68205696/

相关文章:

php - 我可以用PHP获取iframe父窗口的url吗?

php - cURL 不喜欢 ssl 证书中的主题和主机名不匹配

php - 整洁地编写 MySQL 查询以提高可读性的推荐方法是什么?

java - 如何否定包含范围的正则表达式?

java - URL 中有效图像的正则表达式

php - baseurl 不适用于 YII2

javascript - 创建正则表达式匹配数组(多行,javascript)

JavaScript、正则表达式 : How to fetch mail address in mailto: links

javascript - 正则表达式和单词搜索不匹配带有空格的单词

python - 为以不同字母开头和结尾的单词获取正确的正则表达式