正規表現の文字境界表現について

2023-01-04
regex
正規表現

下記の記事を見かけて、単語境界を表す \b について、どの正規表現からサポートされているのか気になったので調べてみた。

たった4文字でコード検索の精度がブチあがる正規表現 - Qiita

仕様書

私の記憶はあやふやなので、書籍をあたってみた。

正規表現技術入門 ――最新エンジン実装と理論的背景:書籍案内|技術評論社 P75より

POSIX 正規表現には標準正規表現 (BRE, Basic Regular Expression) と拡張正規表現 (ERE, Extende Regular Expression) の2種類があります。

というわけで、POSIX 正規表現の仕様書をあたってみたが、どれが正当な仕様書なのかはよくわからなかったが、GNU のマニュアルが見つかった。

このいずれの仕様書においても、\bmatches a word boundary と書かれているので、sed, grep でも単語境界は利用できると考えて良さそう。

試してみる

grep

1
2
$ echo "PhpStorm is a development tool for PHP" | grep --color -i "\bphp\b"
PhpStorm is a development tool for PHP

マッチした場所が分かりづらいのでスクショ↓

sed

1
2
$ echo "PhpStorm is a development tool for PHP" | gsed -e "s/\bPHP\b/Ruby/ig"
PhpStorm is a development tool for Ruby

残念ながら、macOS 標準の sed ではサポートされていなかったので、GNU sed を使いました。

まとめ

というわけで、単語境界は BRE からサポートされているので、ほとんどの正規表現エンジンでサポートされていると思われます。割と安心して使える表現ですね!