my_back_pages

Ruby / Rails / FjordBootCamp

【正規表現】単語の境界を表すメタ文字 \b

正規表現において、\bは「単語の境界」を表すメタ文字です。

「単語の境界」とは?

単語境界とは、次の文字が単語文字で、前の文字が単語文字でない場合、またはその逆の場合です。

developer.mozilla.org

理解のポイントは以下のようなことの模様。

  • \bは「空白」や「スペース」などの、単語の区切りになるような「文字」にマッチしているわけではない。
  • 単語と非単語の境界という「位置」に一致している。

英単語の検知としての使用

Railsには単語の単数/複数形をうまく変換してくれる便利なヘルパーがあります。

このヘルパーで意図通りにビュー上で単語を表示できているかをテストをしたいときに、このメタ文字について調べました。

api.rubyonrails.org

micropostmicropostsで実験

1 microposts(複数形)ではなく、1 micropostになっていることを確かめたい。

↑単純にmicropostで検索してしまうと、複数形のmicropostsもヒットしてしまいます。

\bmicropost\bのように前後に単語境界を含めるようにすれば、sがつかない単数形のmicropostだけをヒットさせることができます。

↑上述のように\bはあくまで単語と非単語の境界を表しているだけなので、空白以外の非単語(ピリオド・ダブルクォーテーション・!マークなど)と単語の境界も検知します。

単語と非単語の境界の可視化

\bだけで検索すると、あらゆる単語と非単語(行頭・行末含む)の間の「位置」そのものにヒットしていることがよくわかりますね。

正規表現は苦手意識を持ってしまっているのですが(非常に良くない)、使わないと慣れようがないので、避けずにインプット・アウトプットしていこうと思います。

参考にさせていただきました🙏

qiita.com