1

このパターンで、このテキストに一致させることができます

パターン:

"abc\(.*?\)abc"

文章:

"abc(" "")abc"

開始方法と終了方法をユーザーに決定してもらいたい場合はどうすればよいでしょうか。abcの代わりに何でもかまいません

パターン:

"(.*?)\(.*?\)$1"

文章:

"def(" "")def"

$ は行末を意味し、グループ 1 と一致しないように見えるため、これは機能しません。.NET で正規表現と一致させることはできますか?

4

2 に答える 2

2

\1正規表現パターン内で使用して、キャプチャ グループを後方参照する必要があります。

"(.*?)\(.*?\)\1"
于 2013-08-15T09:24:02.297 に答える
2

私は主$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 >>>

于 2013-08-15T09:42:43.823 に答える