LoginSignup
2
0

More than 5 years have passed since last update.

boost::regexの怪

Posted at

ハマったので自分用にメモ

boost::regex hoge("(?:\".+?\"|[^:\\ ]+?)");

こんなコードがあるとして、エラーにならないけど、マッチしない場合がありました。

動くんだけど、マッチしない。
他の言語、環境ならマッチするのになんでや!

意味が分からないので、なんとなくOR条件の前後を入れ替えてみました。

boost::regex hoge("(?:[^:\\ ]+|\".+?\")");

すると例外が発生します。なんやて!ウソやろ。。。
文字クラスがおかしいらしい・・・

原因は文字クラスのエスケープシーケンスが不足していたため。
boost::regex hoge("(?:\".+?\"|[^\\:\\\\ ]+)");

boostのバージョンとか環境にもよると思いますが、中途半端に動いちゃうためにドツボにハマってしまいました。
定義した時点で正規表現がおかしかったら例外が発生すると思ってた(実際してた)のでなおさら。

2
0
3

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
2
0