正規表現「\b」(単語の境界)編

原文ファイルのトリセツ

皆さま、こんにちは。ホンヤク社の成田です。
最強最長寒波が来ていますが、皆さまのお住まいの地域は大丈夫でしょうか。

 

今回は、単語の境界を表す「\b」についてお話しします。単語の境界、というのはイメージしづらいかもしれませんが、たとえば、検索する文字列を「hand」とした場合に、単語の「hand」は当然ヒットしますが、同時に「handle」「beforehand」や先方や後方一致のケース、あるいは「merchandise」といった部分一致のケースの「hand」という文字列を拾ってしまう可能性があります。限定して「hand」という単語のみを検索したいときに、この正規表現が使えます。

 

\b
「単語の境界」を表す正規表現です。任意の文字列の前や後につけて、単語の区切り目を条件づける形で文字列を検索できます。なお、この単語の境界には、単語間のスペースをはじめ、行頭や行末や記号などが含まれ、より厳密にいえば「\w」(全角文字、半角カナ、半角英数字またはアンダースコア1文字)と「\W」(それら以外の1文字)の境界のことを指します。

 

<使用例>
\bhand\b
⇒ 「hand」という文字列がヒットします。冒頭の例でいえば「handle」「beforehand」「merchandise」の中の「hand」はヒットしません。ただし、この場合は複数形の「hands」もヒットしませんので、単数と複数形両方をヒットさせたい場合は「\bhands?\b」(handの後にsが0個か1個ある)というような書き方にすればよいかと思います。

 

\bhand
⇒ 「hand」の前だけに単語の境界があるので、冒頭の例でいえば「hand」と「handle」の中の「hand」がヒットします。なお、行頭などでの出現が想定される「Hand」もまとめてヒットさせたい場合は、「\b[hH]and」と書いてください。※[ ] については次回から詳しくお話しします。

 

hand\b
⇒ 「hand」の後だけに単語の境界があるので、冒頭の例でいえば「hand」と「beforehand」の中の「hand」がヒットします。

 

また、「単語の境界以外」を表す「\B」という正規表現もあります。これはその名の通り、「\b」と反対の機能を持ちます。

 

\Bhand\B
⇒ 「hand」の前後が単語の境界でないという意味ですので、冒頭の例の「merchandise」の中の「hand」がヒットします。

 

いかがでしたでしょうか? 検索や絞り込み対象をより厳密に仕分けたいときに、補助的にこれら「\b」「\B」を効果的に活用くださればと思います。

次回は、「指定文字のいずれか1文字」を表す「[ ]」についてお話しします。