10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C#の正規表現でエスケープに躓いたのでメモ

Last updated at Posted at 2016-02-17

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 そこそこの閲覧数なので、書き直した。

10
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?