用于注释块/ * * /包含的Visual Studio正则表达式;字符

时间:2015-07-16 20:45:43

标签: regex visual-studio-2013

我正在寻找用于匹配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中使用。

编辑:更新了示例以应对一些极端情况。

1 个答案:

答案 0 :(得分:0)

以下是可以获得最接近匹配的正则表达式:

/\*(?:(?!/\*|\*/)[\S\s\r])*;(?:(?!/\*|\*/)[\S\s\r])*\*/

请参阅demo

我们的想法是使用tempered greedy token(也是described on SO)来确保匹配尽可能少且匹配最近的匹配。

  • /\* - 匹配/*
  • (?:(?!/\*|\*/)[\S\s\r])* - 顽固的贪婪令牌
  • ; - /*...*/块内的分号
  • (?:(?!/\*|\*/)[\S\s\r])* - 顽固的贪婪令牌
  • \*/ - 匹配文字*/