C#の正規表現でのエスケープに躓いたのでメモ
正規表現を使っている間に突然エラーが出てしまって詰まった。
詰まったコード
Form1.cs
// 動く
Regex a = new Regex("^https?://");
Regex b = new Regex("#.+$");
// 動かない
Regex c = new Regex("-\d+?$");
出力されるエラー
重大度レベル | コード | 説明 |
---|---|---|
エラー | CS1009 | 認識できないエスケープ シーケンスです。 |
原因
バックスラッシュがエスケープシーケンスとして認識されてしまっている。
ファイルパス等では、あからさまに臭いのですぐに気づけることが多いが、正規表現では見落としがちだ。
普通の回避方法 (regular string literal)
バックスラッシュをエスケープする。
Form1.cs
Regex c_a = new Regex("-\\d+?$");
いい感じの回避方法 (verbatim string literal)
文字列の前に@
をつけることで、verbatim string literalとしエスケープ文字を無効化する。
Form1.cs
Regex c_b = new Regex(@"-\d+?$");
余談だがファイルパスの表現にもverbatim string literalは便利だ。
Form1.cs
string path = @"C:\windows\system32\";
参考
更新履歴
2018-10-14 そこそこの閲覧数なので、書き直した。