2

エディターで検索するときに、コメント アウト行のコメントを一致させたいと思います (複数行モードと同等か、そう思いますか?)。

正規表現(?<!^)%.+?$は、次のコードのコメント アウトされた最初の行のコメントと正しく一致します (a の後のすべて%がコメント アウトされます)。

 % foo = bar() % First comment

      % baz = qui() % Second commment

しかし、不明な数のスペースまたはタブでインデントされていると仮定すると、2行目も一致させる方法がわかりません。

私はこれを試みて失敗しました:((?<!^)%.+?$|(?<!^\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

これは、ルックアラウンドが特定の問題に対して常に最適なアプローチであるとは限らないことを示しています。

Notepad ++の次のデータでテストしました

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

最初にキャプチャされたグループに置き換えると、次のようになります (これは、正しい部分のみがキャプチャされていることを示しています)。

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