正規表現の単語境界アサーション\b
についてまとめた。
- 早見表(例・説明は記事で説明している。)
正規表現 | マッチするもの |
---|---|
\b |
\b{start} または\b{end}
|
\b{start} |
左が\W|\A かつ右が\w
|
\b{start-half} |
左が\w かつ右が\W|\z
|
\b{end} |
左が\W|\A
|
\b{end-half} |
右が\W|\z
|
\b
単語と非単語の境目にマッチする。
「左が単語の一部でない」かつ「右が単語の一部である」位置
もしくは、
「左が単語の一部である」かつ「右が単語の一部でない」位置
にマッチする。
後で説明する\b{start}
と\b{end}
を合わせたもの。
例
- パターン:
r"\btest"
- テスト文字列(太字にマッチ): "hello test world mytest testtext--test"
- パターン:
r"test\b"
- テスト文字列(太字にマッチ): "hello test world mytest testtext--test"
\b{start}
\<
と同じ。
単語と非単語の境目の、単語の頭側の位置にマッチする。
「左が単語の一部でない」かつ「右が単語の一部である」位置
にマッチする。
例
- パターン:
r"\b{start}test"
- テスト文字列(太字にマッチ): "hello test world mytest testtext--test"
- パターン:
r"\b{start}-test"
- テスト文字列(マッチ無し): "hello test world mytest testtext--test"
-
は単語の一部とは判定されないため、r"\b{start}-"
は何にもマッチしない
\b{start-half}
「左が単語の一部でない」位置
にマッチする。
右が単語の一部であるかどうかは判定しない。
例
- パターン:
r"\b{start-half}test"
- テスト文字列(太字にマッチ): "hello test world mytest testtext--test"
- パターン:
r"\b{start-half}-test"
- テスト文字列(太字にマッチ): "hello test world mytest testtext--test"
(-
もマッチしている)
-
は単語の一部とは判定されないが、\b{start-half}
は「左が単語でない」であればマッチするので、r"\b{start}-"
が機能する。
\b{end}
\>
と同じ
単語と非単語の境目の、単語のお尻側の位置にマッチする。
「右が単語の一部でない」かつ「左が単語の一部である」位置
にマッチする。
\b{start}
の逆なので例省略。
\b{end-half}
「右が単語の一部でない」位置
にマッチする。
左が単語の一部であるかどうかは判定しない。
\b{start-half}
の逆なので例省略。
参考
- Kustoのドキュメント
https://learn.microsoft.com/ja-jp/kusto/query/regex?view=microsoft-fabric#repetitions - 動作確認(リンク先のRustの正規表現エンジンを選択)
https://regex101.com/ - RustのRegexクレートのドキュメント
https://docs.rs/regex/1.10.3/regex/index.html#empty-matches