私は主$1
に置換セクションで使用されているのを見てきました。しかし、それが機能しない式では、 を使用する必要が\1
あるため、式は次のようになります"(.*?)\(.*?\)$1"
。
少し改善してみましょう。負の文字クラスを使用して明示的に一致させることができます: \([^)]+\)
. [^)]+
は、1 回以上閉じ括弧以外のすべてに一致することを意味します。このようにして、空の括弧も削除しました。
ここで学んだことを適用して、式が一重引用符も受け入れるようにしましょう。("|')(.*?)\([^)]+\)\2\1
("|') # match either a single or double quote and put it in group 1
(.*?) # match anything ungreedy zero or more times until ... and put it in group 2
\( # match opening parenthesis (
[^)]+ # match anything except closing parenthesis ) one or more times
\) # match closing parenthesis
\2 # match what was matched in group 2
\1 # match what was matched in group 1
今後の参考のために、名前付きグループを使用することもできます。次の構文を使用して、.NET で名前付きグループを宣言できます(?<namedgroup>.*?)
。次に、式で次のような後方参照を使用できます\k<namedgroup>
。この構文は .NET 専用であることを忘れないでください。PCRE には別の構文があります。
上記の式を例に取ると、次のパターンになります。
(?<quotes>"|')(?<str>.*?)\([^)]+\)\k<str>\k<quotes>
Online .NET regex demo
For further reading >>>