检查正则表达式匹配是否在多行注释中

时间:2015-11-03 09:15:47

标签: regex

我在文件中有一组匹配项,并希望找出哪些匹配项在评论中(/**/之间)。这是我可以用正则表达式做的事情吗?

我在考虑/\*.*MATCH.*\*/,但这也符合情况/* comment */ MATCH /* some other comment */。有没有正确的方法来做到这一点?

请注意,MATCH可以在文件内多次出现(在注释内,而不在注释中)。

3 个答案:

答案 0 :(得分:0)

\/\*(?:(?!\/\*|\*\/)[\s\S])*\bMATCH\b(?:(?!\/\*|\*\/)[\s\S])*\*\/

您可以在此处使用基于lookahead的正则表达式。请参阅演示。

https://regex101.com/r/lR1eC9/3

答案 1 :(得分:0)

那是因为.*贪婪并且会尽可能多地匹配字符。相反,请尝试使用延迟匹配*?

\/\*[^\/\*]*?MATCH[^\/\*]*?(\*\/)

这是fiddle

答案 2 :(得分:0)

虽然previos先行答案有效,但它不适用于文件中的多个MATCH事件。因此,我找到了一个更好的非基于正则表达式的解决方案:

var lastCommentStartBefore = content.LastIndexOf("/*", match.Index);
var lastCommentEndBefore = content.LastIndexOf("*/", match.Index);
if (lastCommentEndBefore < lastCommentStartBefore)
    // within comment