我希望匹配包含特定字词的多行注释,例如findthis
。我想到的第一个模式是\/\*.*?findthis.*?\*\/
(使用DOTALL
)。然而,这种模式的问题是像这样的字符串:
/* this is a comment */
this is some text
/* this is a findthis comment */
将匹配整个文本。基本上,在较大的文件上,第一个匹配将包含从第一个评论到包含findthis
的第一个评论的所有内容。我该如何防止这种情况?
答案 0 :(得分:2)
好吧,您可以将正则表达式更改为\/\*([^*]|\*+[^/*])*findthis([^*]|\*+[^/*])*\*+\/
但 ...
要完全正确,您必须完全标记化源代码。否则你的正则表达式会被字符串中的类似注释的内容所欺骗(在其他奇怪的角落案例中)。
(疯狂正则表达式的解释:([^*]|\*+[^/*])
匹配评论内部的一小部分,但绝不匹配*/
的全部或部分内容。)
答案 1 :(得分:0)
我认为这应该可以解决问题:
/\/\*.*?findthis.*?\*\//
。的?在.*?
部分意味着不合适。通过这种方式,注释可以包含*和/ chars,但不能包含* /(注释的结尾)