✉️

正規表現の基本三演算について

2021/10/08に公開

正規表現は 3 つの基本演算として「連接」、「選択」、「繰り返し」があります。3 つの基本演算を組み合わせることでいろいろな正規表現を作ることができます。

連接

二つの正規表現rsをつなげた正規表現rsrというパターンの直後にsというパターンが続くことを表します。


  • ABCABC の文字が順番に繋げられています。

選択

二つの正規表現rs|で並べるとrというパターン またはsというパターン を表します。
1 文字だけの場合は[](文字クラス)を使うことができます。


  • abcd|ABCDという正規表現があるときabcdまたはABCDを表します。
    a|b[ab]は同じ意味です。
    xyzの選択は[xyz][x-z]と書くことができます。

繰り返し

「*」を使うことで任意の長さの繰り返しを表現します。
rという正規表現があった場合、(r)*rにマッチする文字が 0 回以上繰り返されているパターンを表します。


  • [A-Za-z]*は任意長のアルファベット列を表現します。

演算の結合順位

演算の結合順位は、「どの演算から評価するか」を表します。
結合順位は下記の順番で評価されます。

繰り返し > 連接 > 選択

ある演算を優先的に評価したい場合は()で括ること(グループ化といいます)で、優先的に評価します。


  • hoge|fugaという正規表現を繰り返したい場合は(hoge|fuga)*と表します。
    hoge|fuga*と表すとhogeという正規表現とfuga*という正規表現の連接を表します。

その他

今回は、詳しく記載しないですがシンタックスシュガーとして"+"や"?"などがあります。

参考

正規表現技術入門――最新エンジン実装と理論的背景

GitHubで編集を提案

Discussion