0

私は正規表現を使用していましたが、次のように書こうとしました:

Regex RegObj2 = new Regex("\w[a][b][(c|d)][(c|d)].\w");

このエラーは、次の出現ごとに 1 つずつ、2 回表示されます\w

unrecognized escape sequence

私は何を間違っていますか?

4

4 に答える 4

4

\非逐語的な文字列リテラルで s をエスケープしていません。

解決策: C# の文字列リテラル@の規則に従って、文字列の前に a を付けるか、バックスラッシュを 2 つ付けます。

于 2013-01-25T13:58:15.623 に答える
3

エスケープをエスケープしてみてください ;)

Regex RegObj2 = new Regex("\\w[a][b][(c|d)][(c|d)].\\w");

または@を追加します(@Dominic Kexelが提案したように)

于 2013-01-25T13:58:23.580 に答える
1

正規表現を作成する場合、2つのレベルの潜在的なエスケープが必要です。

  • エスケープする正規表現(たとえば、角かっこをエスケープするか、この場合は文字クラスを指定します)
  • C#文字列リテラルのエスケープ

この場合、あなたをつまずかせるのは後者です。をエスケープして文字列の一部にする逐語的な文字列リテラル(プレフィックス付き)を使用して、通常のエスケープの意味を持たないようにします。したがって、これらのいずれか:\@\

Regex regex1 = new Regex(@"\w[a][b][(c|d)][(c|d)].\w");
Regex regex2 = new Regex("\\w[a][b][(c|d)][(c|d)].\\w");

2つのアプローチは、実行時に完全に同等です。どちらの場合も、値を使用して文字列定数を作成しようとしています

\w[a][b][(c|d)][(c|d)].\w

2つの形式は、これをC#ソースコードで表現するための異なる方法です。

于 2013-01-25T14:00:38.397 に答える
0

バックスラッシュはエスケープされていません\\

new Regex(@"\w[a][b][(c|d)][(c|d)].\w");
于 2013-01-25T13:59:47.947 に答える