我正在寻找用于匹配C样式块注释(/ * ... * /)中注释的文本的正则表达式,但只查找包含字符";"在里面。例如,文字
/*
some non code comment
*/
/*
some_code();
*/
/*
another non code comment
*/
important_code();
/*
yet another non code comment
*/
应匹配" some_code();"周围的模式,但不能与外部模式相匹配。我得到的最接近的解决方案是
/\*(.|\r?\n)*?;(.|\r?\n)*?\*/
但不幸的是它也选择了第一个块。我想也许某种方式不允许出现" / *"在模式中可以做到这一点,但我不知道如何做到这一点。
任何帮助将不胜感激。我在这里或网上找到的解决方案通常使用包含&#34 ;;"的一行注释(//)。字符或任何块注释(不一定用&#34 ;;"在其中),没有像我在这里描述的那样。理想情况下,它可以在Visual Studio 2013中使用。
编辑:更新了示例以应对一些极端情况。
答案 0 :(得分:0)
以下是可以获得最接近匹配的正则表达式:
/\*(?:(?!/\*|\*/)[\S\s\r])*;(?:(?!/\*|\*/)[\S\s\r])*\*/
请参阅demo
我们的想法是使用tempered greedy token(也是described on SO)来确保匹配尽可能少且匹配最近的匹配。
/\*
- 匹配/*
(?:(?!/\*|\*/)[\S\s\r])*
- 顽固的贪婪令牌;
- /*...*/
块内的分号(?:(?!/\*|\*/)[\S\s\r])*
- 顽固的贪婪令牌\*/
- 匹配文字*/
。