正規表現において、\b
は「単語の境界」を表すメタ文字です。
「単語の境界」とは?
単語境界とは、次の文字が単語文字で、前の文字が単語文字でない場合、またはその逆の場合です。
理解のポイントは以下のようなことの模様。
\b
は「空白」や「スペース」などの、単語の区切りになるような「文字」にマッチしているわけではない。- 単語と非単語の境界という「位置」に一致している。
英単語の検知としての使用
Railsには単語の単数/複数形をうまく変換してくれる便利なヘルパーがあります。
このヘルパーで意図通りにビュー上で単語を表示できているかをテストをしたいときに、このメタ文字について調べました。
micropost
とmicroposts
で実験
1 microposts
(複数形)ではなく、1 micropost
になっていることを確かめたい。
↑単純にmicropost
で検索してしまうと、複数形のmicroposts
もヒットしてしまいます。
↑\bmicropost\b
のように前後に単語境界を含めるようにすれば、s
がつかない単数形のmicropost
だけをヒットさせることができます。
↑上述のように\b
はあくまで単語と非単語の境界を表しているだけなので、空白以外の非単語(ピリオド・ダブルクォーテーション・!マークなど)と単語の境界も検知します。
単語と非単語の境界の可視化
\b
だけで検索すると、あらゆる単語と非単語(行頭・行末含む)の間の「位置」そのものにヒットしていることがよくわかりますね。
正規表現は苦手意識を持ってしまっているのですが(非常に良くない)、使わないと慣れようがないので、避けずにインプット・アウトプットしていこうと思います。