私は正規表現を使用していましたが、次のように書こうとしました:
Regex RegObj2 = new Regex("\w[a][b][(c|d)][(c|d)].\w");
このエラーは、次の出現ごとに 1 つずつ、2 回表示されます\w
。
unrecognized escape sequence
私は何を間違っていますか?
\
非逐語的な文字列リテラルで s をエスケープしていません。
解決策: C# の文字列リテラル@
の規則に従って、文字列の前に a を付けるか、バックスラッシュを 2 つ付けます。
エスケープをエスケープしてみてください ;)
Regex RegObj2 = new Regex("\\w[a][b][(c|d)][(c|d)].\\w");
または@を追加します(@Dominic Kexelが提案したように)
正規表現を作成する場合、2つのレベルの潜在的なエスケープが必要です。
この場合、あなたをつまずかせるのは後者です。をエスケープして文字列の一部にするか、逐語的な文字列リテラル(プレフィックス付き)を使用して、通常のエスケープの意味を持たないようにします。したがって、これらのいずれか:\
@
\
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#ソースコードで表現するための異なる方法です。
バックスラッシュはエスケープされていません\\
。
new Regex(@"\w[a][b][(c|d)][(c|d)].\w");