2

在我的编辑器中搜索时,我想匹配注释行的注释(相当于多行模式,或者我相信?)。

正则表达式(?<!^)%.+?$正确匹配以下代码注释掉的第一行的注释(a 之后的所有内容都%被注释掉),

 % foo = bar() % First comment

      % baz = qui() % Second commment

但我不知道如何匹配第二行,假设它被未知数量的空格或制表符缩进。

我尝试这样做但失败了:((?<!^)%.+?$|(?<!^\s)%.+?$)

(我以前的正则表达式放在一个“ or-bracket”中,重复并扩展以允许未知数量的空格;打破了正则表达式,因为+and*运算符显然不允许在s后面的(前瞻中)。|)

4

1 回答 1

2

^\s*%[^%\n]*%(.*?)$应该做的工作。

解释:

^        # Start of a line
\s*      # 0 or more white spaces
%        # Just a regular % sign
[^%\n]*  # Matches 0 or more times anything that is not a % or a new line (\n)
%        # Just a regular % sign
(.*?)    # Captures everything after the second % (ungreedy)
$        # End of a line (because the previous in ungreedy it will not match items on the new line

这表明环顾四周并不总是解决某些问题的最佳方法。

我在记事本++中对以下数据进行了测试

% foo = bar() % First comment
% test 
      % baz = qui() % Second commment
someFunction() 

用第一个捕获的组替换它会导致:(这表明只捕获了正确的部分)

 First comment
% test 
 Second commment
someFunction()
于 2013-05-28T13:37:27.333 回答