出典 しゅってん は列挙 れっきょ するだけでなく、脚注 きゃくちゅう などを用 もち いてどの記述 きじゅつ の情報 じょうほう 源 げん であるかを明記 めいき してください。記事 きじ の信頼 しんらい 性 せい 向上 こうじょう にご協力 きょうりょく をお願 ねが いいたします。(2023年 ねん 11月 )
正規 せいき 表現 ひょうげん (せいきひょうげん、英 えい : regular expression )は、文字 もじ 列 れつ の集合 しゅうごう を一 ひと つの文字 もじ 列 れつ で表現 ひょうげん する方法 ほうほう の一 ひと つである。正則 せいそく 表現 ひょうげん ( せいそくひょうげん ) とも呼 よ ばれ、形式 けいしき 言語 げんご 理論 りろん の分野 ぶんや では比較的 ひかくてき こちらの訳語 やくご の方 ほう が使 つか われる[1] 。まれに正則 せいそく 式 しき ( せいそくしき ) [2] あるいは正規 せいき 式 しき ( せいきしき ) と呼 よ ばれることもある。
もともと正規 せいき 表現 ひょうげん は形式 けいしき 言語 げんご 理論 りろん において正規 せいき 言語 げんご を表 あらわ すための手段 しゅだん として導入 どうにゅう された。形式 けいしき 言語 げんご 理論 りろん では、形式 けいしき 言語 げんご が「正規 せいき 言語 げんご であること」と「正規 せいき 表現 ひょうげん によって表 あらわ せること」は同値 どうち である。
その後 ご 正規 せいき 表現 ひょうげん は単 たん 機能 きのう の文字 もじ 列 れつ 探索 たんさく ツールやテキストエディタ 、ワードプロセッサ などのアプリケーション で、マッチさせるべき対象 たいしょう を表 あらわ すために使用 しよう されるようになり、表 あらわ せるパターンの種類 しゅるい を増 ふ やすために本来 ほんらい の正規 せいき 表現 ひょうげん にはないさまざまな記法 きほう が新 あら たに付 つ け加 くわ えられた。このような拡張 かくちょう された正規 せいき 表現 ひょうげん には正規 せいき 言語 げんご ではない文字 もじ 列 れつ も表 あらわ せるものも多 おお く、ゆえに正規 せいき 表現 ひょうげん という名前 なまえ は実態 じったい に即 そく していない面 めん もあるが、伝統 でんとう 的 てき に正規 せいき 表現 ひょうげん と呼 よ ばれ続 つづ けている。
この記事 きじ では主 おも にこのような正規 せいき 表現 ひょうげん を用 もち いたパターンマッチング について説明 せつめい している。以下 いか 、誤解 ごかい のない限 かぎ り、アプリケーションやプログラミング において正規 せいき 表現 ひょうげん を用 もち いた文字 もじ 列 れつ のパターンマッチングを行 おこな う機能 きのう のことを、単 たん に正規 せいき 表現 ひょうげん という。
ほとんどのプログラミング言語 げんご では、ライブラリ によって正規 せいき 表現 ひょうげん を使 つか うことができる他 ほか 、一部 いちぶ の言語 げんご では正規 せいき 表現 ひょうげん のリテラル もある。「正規 せいき 表現 ひょうげん によるマッチ」を意味 いみ する(専用 せんよう の)演算 えんざん 子 こ がある言語 げんご なども一部 いちぶ ある。具体 ぐたい 例 れい として、grep , AWK , sed , Perl , Tcl , lex などがある。
それぞれの言語 げんご やアプリケーションで細部 さいぶ の仕様 しよう が異 こと なっている、といったように思 おも われることも多 おお いが(古 ふる い実装 じっそう では実際 じっさい にそのようなことも多 おお い)、近年 きんねん は同 おな じライブラリを使 つか っていれば同 おな じということも多 おお い。またPOSIX など標準 ひょうじゅん もある。
基本 きほん 的 てき な概念 がいねん [ 編集 へんしゅう ]
理論 りろん 的 てき に明解 めいかい であり扱 あつか いも容易 ようい であるため、形式 けいしき 的 てき な説明 せつめい を先 さき に述 の べる。
形式 けいしき 的 てき な説明 せつめい [ 編集 へんしゅう ]
記号 きごう (アルファベット)
A
=
{
a
1
,
…
,
a
n
}
{\displaystyle A=\{a_{1},\dots ,a_{n}\}}
上 うえ の正規 せいき 表現 ひょうげん は次 つぎ のようなものから成 な る。正規 せいき 表現 ひょうげん があらわす記号 きごう 列 れつ (アルファベット列 れつ )の集合 しゅうごう によって形式 けいしき 言語 げんご が定義 ていぎ される。
∅
{\displaystyle \varnothing }
は正規 せいき 表現 ひょうげん である。これは記号 きごう 列 れつ を何 なに も含 ふく まない空 そら 集合 しゅうごう
∅
{\displaystyle \varnothing }
を表 あらわ す。
a
i
{\displaystyle a_{i}}
(
A
{\displaystyle A}
の任意 にんい の要素 ようそ )は正規 せいき 表現 ひょうげん である。これは
a
i
{\displaystyle a_{i}}
という記号 きごう 列 れつ のみからなる集合 しゅうごう
{
a
i
}
{\displaystyle \{a_{i}\}}
を表 あらわ す。
X
{\displaystyle X}
と
Y
{\displaystyle Y}
が正規 せいき 表現 ひょうげん ならば、
X
∣
Y
{\displaystyle X\mid Y}
も正規 せいき 表現 ひょうげん である。これは
X
{\displaystyle X}
に含 ふく まれる記号 きごう 列 れつ の集合 しゅうごう と
Y
{\displaystyle Y}
に含 ふく まれる記号 きごう 列 れつ の集合 しゅうごう の和 わ 集合 しゅうごう を表 あらわ す。
X
Y
{\displaystyle XY}
も正規 せいき 表現 ひょうげん である。これは
X
{\displaystyle X}
に含 ふく まれる記号 きごう 列 れつ に
Y
{\displaystyle Y}
に含 ふく まれる記号 きごう 列 れつ をつなげてできる記号 きごう 列 れつ の集合 しゅうごう
{
a
b
∣
a
∈
X
,
b
∈
Y
}
{\displaystyle \{ab\mid a\in X,b\in Y\}}
を表 あらわ す。
X
∗
{\displaystyle X*}
も正規 せいき 表現 ひょうげん である。これは
X
{\displaystyle X}
に含 ふく まれる記号 きごう 列 れつ を 0 個 こ 以上 いじょう つなげてできる文字 もじ 列 れつ の集合 しゅうごう
⋃
n
{
X
n
∣
n
≥
0
}
{\displaystyle \bigcup _{n}\{X^{n}\mid n\geq 0\}}
を表 あらわ す(クリーネ閉包 へいほう )。
上記 じょうき の帰納的 きのうてき 導出 どうしゅつ によって構成 こうせい される記号 きごう 列 れつ のみが正規 せいき 表現 ひょうげん である。
正規 せいき 表現 ひょうげん の定義 ていぎ に、次 つぎ の項目 こうもく を含 ふく めることもある:
ε いぷしろん
{\displaystyle \varepsilon }
は正規 せいき 表現 ひょうげん である。これは空 そら 記号 きごう 列 れつ
ε いぷしろん
{\displaystyle \varepsilon }
のみからなる集合 しゅうごう
{
ε いぷしろん
}
{\displaystyle \{\varepsilon \}}
を表 あらわ す。
正規 せいき 表現 ひょうげん
ε いぷしろん
{\displaystyle \varepsilon }
の表 あらわ す集合 しゅうごう は正規 せいき 表現 ひょうげん
∅
∗
{\displaystyle \varnothing *}
の表 あらわ す集合 しゅうごう に等 ひと しいので、
ε いぷしろん
{\displaystyle \varepsilon }
を正規 せいき 表現 ひょうげん の定義 ていぎ に含 ふく めなくても
∅
∗
{\displaystyle \varnothing *}
で代用 だいよう できる。
X
∣
Y
{\displaystyle X\mid Y}
の代 か わりに
X
+
Y
{\displaystyle X+Y}
と書 か くことや、
X
Y
{\displaystyle XY}
の代 か わりに
X
⋅
Y
{\displaystyle X\cdot Y}
と書 か くこともある。また、「
∣
{\displaystyle \mid }
」や「
∗
{\displaystyle *}
」の優先 ゆうせん 順位 じゅんい を明確 めいかく にするために、補助 ほじょ 的 てき なカッコも(上述 じょうじゅつ の定義 ていぎ には含 ふく めていないが)必要 ひつよう である。
実用 じつよう 的 てき 説明 せつめい [ 編集 へんしゅう ]
以下 いか ではもっぱらよく使 つか われているライブラリやツールなどの実用 じつよう 的 てき な観点 かんてん から説明 せつめい する。
例 たと えば、「Handel
」「He ndel
」「Hae ndel
」という3つの文字 もじ 列 れつ を含 ふく む集合 しゅうごう は「H(e|ae?)ndel
」というパターンで表現 ひょうげん できる(あるいは、パターンは個々 ここ の3つの文字 もじ 列 れつ にマッチする と言 い われる)。ほとんどの形式 けいしき では、もし特定 とくてい の集合 しゅうごう にマッチする何 なん らかの正規 せいき 表現 ひょうげん が存在 そんざい すれば、無限 むげん の数 かず のそのような表現 ひょうげん がある。ほとんどの形式 けいしき では正規 せいき 表現 ひょうげん を構築 こうちく するために次 つぎ の演算 えんざん 子 こ を提供 ていきょう している。
選言 せんげん
縦 たて 棒 ぼう は選択肢 せんたくし を区切 くぎ る。例 たと えば「gray|grey
」は「gray
」または「grey
」にマッチし、これは通常 つうじょう 「gr(a|e)y
」に短縮 たんしゅく される。
グループ分 わ け
丸 まる 括弧 かっこ はスコープと演算 えんざん 子 こ の優先 ゆうせん 順位 じゅんい を定義 ていぎ するために用 もち いられる。例 たと えば、「gr(a|e)y
」では「(a|e)
」の部分 ぶぶん で「a
」または「e
」を示 しめ し、全体 ぜんたい で「gray
」または「grey
」にマッチする。
量 りょう 化 か
文字 もじ やグループの後 うし ろの量 りょう 化 か 子 こ は、直前 ちょくぜん の表現 ひょうげん が何 なん 回 かい 現 あらわ れることが許 ゆる されるかを指定 してい する。非常 ひじょう によく使 つか われる量 りょう 化 か 子 こ として「?
」「*
」「+
」がある。
?
疑問符 ぎもんふ は直前 ちょくぜん の表現 ひょうげん が0個 こ か1個 いっこ ある ことを示 しめ す。例 たと えば、「colou?r
」は「color
」と「colour
」にマッチする。
*
アスタリスク は直前 ちょくぜん の表現 ひょうげん が0個 こ 以上 いじょう ある ことを示 しめ す。例 たと えば、「go*gle
」は「google
」「gogle
」「ggle
」などにマッチする。
+
プラス符号 ふごう は直前 ちょくぜん の表現 ひょうげん が1個 いっこ 以上 いじょう ある ことを示 しめ す。例 たと えば、「go+gle
」は「google
」「gogle
」などにマッチするが、「ggle
」にはマッチしない。
これらの構文 こうぶん は任意 にんい の複雑 ふくざつ な表現 ひょうげん を形成 けいせい するために組 く み合 あ わされて使用 しよう される。
正規 せいき 表現 ひょうげん の起源 きげん は、言語 げんご 学 がく と、理論 りろん 計算 けいさん 機 き 科学 かがく の一 いち 分野 ぶんや であるオートマトン 理論 りろん や形式 けいしき 言語 げんご 理論 りろん にみることができる。20世紀 せいき の言語 げんご 学 がく では数理 すうり 的 てき に言語 げんご を扱 あつか う数理 すうり 言語 げんご 学 がく が発展 はってん しその過程 かてい の一部 いちぶ として、また後者 こうしゃ は計算 けいさん のモデル化 か (オートマトン)や形式 けいしき 言語 げんご の分類 ぶんるい 方法 ほうほう などを扱 あつか う学術 がくじゅつ 分野 ぶんや である。数学 すうがく 者 しゃ のスティーヴン・クリーネ は1950年代 ねんだい に正規 せいき 集合 しゅうごう と呼 よ ばれる独自 どくじ の数学 すうがく 的 てき 表記 ひょうき 法 ほう を用 もち い、これらの分野 ぶんや のモデルを記述 きじゅつ した。
Unix系 けい のツールに広 ひろ まったのは、ケン・トンプソン がテキストファイル中 ちゅう のパターンにマッチさせる手段 しゅだん として、この表記 ひょうき 法 ほう をエディタQED に導入 どうにゅう したことなどに始 はじ まる。彼 かれ はこの機能 きのう をUNIX のエディタed にも追加 ついか し、後 のち に一般 いっぱん 的 てき な検索 けんさく ツールであるgrep の正規 せいき 表現 ひょうげん へと受 う け継 つ がれていった。これ以降 いこう 、トンプソンの正規 せいき 表現 ひょうげん の適用 てきよう にならい、多 おお くのUnix系 けい のツールがこの方法 ほうほう を採用 さいよう した(例 たと えば expr , awk , Emacs , vi , lex , Perl など)。
Perl とTcl の正規 せいき 表現 ひょうげん はヘンリー・スペンサー (英 えい ) によって書 か かれたものから派生 はせい している(Perlは後 のち にスペンサーの正規 せいき 表現 ひょうげん を拡張 かくちょう し、多 おお くの機能 きのう を追加 ついか した)。フィリップ・ヘーゼルはPerl の正規 せいき 表現 ひょうげん とほぼ互換 ごかん のものを実装 じっそう する試 こころ みとしてPerl Compatible Regular Expressions (PCRE) を開発 かいはつ した。これはPHP やApache などといった新 あたら しいツールで使用 しよう されている。
Raku では、正規 せいき 表現 ひょうげん の機能 きのう を改善 かいぜん してその適用 てきよう 範囲 はんい や能力 のうりょく を高 たか め、Parsing Expression Grammar を定義 ていぎ できるようにする努力 どりょく がなされた。この結果 けっか として、Raku 文法 ぶんぽう の定義 ていぎ だけでなくプログラマのツールとしても使用 しよう できる、Perl 6 rules と呼 よ ばれる小 しょう 言語 げんご が生 う み出 だ された。
(本来 ほんらい の)正規 せいき 表現 ひょうげん からの拡張 かくちょう は各種 かくしゅ あり便利 べんり であるがその多 おお くは、(本来 ほんらい の)正規 せいき 言語 げんご から逸脱 いつだつ するものであり、キャプチャなどが代表 だいひょう 例 れい である。なお、正規 せいき 言語 げんご から逸脱 いつだつ しないことによって理論 りろん 的 てき な扱 あつか いが可能 かのう になるという利点 りてん があるため、例 たと えば「非 ひ 包含 ほうがん オペレータ」の提案 ていあん ではそういった観点 かんてん からの理由 りゆう も挙 あ げられている。
Rakuに限 かぎ らずいくつかの実装 じっそう では、(Perlではsubpatternと呼 よ んでいる)部分 ぶぶん パターンの定義 ていぎ とその再帰 さいき 的 てき な呼出 よびだ しにより、例 たと えばカッコの対応 たいおう などといった(本来 ほんらい の)正規 せいき 表現 ひょうげん では不可能 ふかのう なパターンも表現 ひょうげん できる。これは、対象 たいしょう 部分 ぶぶん にマッチした文字 もじ 列 れつ が捕獲 ほかく され、後 ご から利用 りよう できるキャプチャとは異 こと なり、パターンそのものの定義 ていぎ と利用 りよう である。PHP, Perl, Python(regexライブラリ), Ruby などで利用 りよう できる。
UNIX の標準 ひょうじゅん であるPOSIX では、単純 たんじゅん 正規 せいき 表現 ひょうげん 、基本 きほん 正規 せいき 表現 ひょうげん 、拡張 かくちょう 正規 せいき 表現 ひょうげん の3種類 しゅるい の記法 きほう が示 しめ されている。このうち、単純 たんじゅん 正規 せいき 表現 ひょうげん は「歴史 れきし 的 てき [注 ちゅう 1] 」また「レガシー [注 ちゅう 2] 」と書 か かれており、後方 こうほう 互換 ごかん 性 せい を提供 ていきょう するものとされ、標準 ひょうじゅん の将来 しょうらい の版 はん では廃止 はいし され得 え る[注 ちゅう 3] と注意 ちゅうい されている。
単純 たんじゅん 正規 せいき 表現 ひょうげん [ 編集 へんしゅう ]
単純 たんじゅん 正規 せいき 表現 ひょうげん はSRE [注 ちゅう 4] とも呼 よ ばれる。その仕様 しよう は「regexp.h
」のマニュアルページとして示 しめ されている[3] 。
基本 きほん 正規 せいき 表現 ひょうげん [ 編集 へんしゅう ]
基本 きほん 正規 せいき 表現 ひょうげん はBRE [注 ちゅう 5] とも呼 よ ばれる。ほとんどの正規 せいき 表現 ひょうげん を利用 りよう する UNIXのユーティリティ(grepやsed)のデフォルトはこれである[4] 。
この文法 ぶんぽう では、ほとんどの文字 もじ はリテラル(機能 きのう を意味 いみ せず書 か かれたそのまま)に扱 あつか われる。つまり、ある文字 もじ はその文字 もじ にのみマッチする。例 たと えば、正規 せいき 表現 ひょうげん 「a
」は文字 もじ 「a
」にマッチし、正規 せいき 表現 ひょうげん 「(bc
」は文字 もじ 列 れつ 「(bc
」にマッチするなど。例外 れいがい はメタ文字 もじ と呼 よ ばれる。
正規 せいき 表現 ひょうげん
マッチする対象 たいしょう
.
任意 にんい の1文字 もじ にマッチする。
[…]
括弧 かっこ 内 ない に含 ふく まれる1文字 もじ にマッチする。例 たと えば、正規 せいき 表現 ひょうげん 「[abc]
」は1文字 もじ 「a
」「b
」「c
」にマッチする。正規 せいき 表現 ひょうげん 「[a-z]
」は全 すべ ての英 えい 小文字 こもじ の1文字 もじ にマッチする。これらは混 ま ぜることができる。「[abcq-z]
」は1文字 もじ 「a
」「b
」「c
」「q
」「r
」「s
」「t
」「u
」「v
」「w
」「x
」「y
」「z
」にマッチし、正規 せいき 表現 ひょうげん 「[a-cq-z]
」も同様 どうよう である。正規 せいき 表現 ひょうげん 中 ちゅう の「-
」は括弧 かっこ 内 ない の最初 さいしょ か最後 さいご にあるときのみ、リテラルとして扱 あつか われる。例 たと えば正規 せいき 表現 ひょうげん 「[abc-]
」や正規 せいき 表現 ひょうげん 「[-abc]
」は1文字 もじ 「a
」「b
」「c
」「-
」にマッチする。1文字 もじ 「]
」自身 じしん にマッチさせる最 もっと も手 て っ取 と り早 ばや い方法 ほうほう は、囲 かこ んでいる括弧 かっこ 内 ない で、括弧 かっこ が最初 さいしょ になるようにすることである。例 たと えば正規 せいき 表現 ひょうげん 「[][ab]
」は1文字 もじ 「]
」「[
」「a
」「b
」にマッチする。
[^…]
括弧 かっこ 内 ない に含 ふく まれない1文字 もじ にマッチする。例 たと えば正規 せいき 表現 ひょうげん 「[^abc]
」は「a
」「b
」「c
」以外 いがい の任意 にんい の文字 もじ にマッチする。正規 せいき 表現 ひょうげん 「[^a-z]
」は英 えい 小文字 こもじ 以外 いがい の任意 にんい の1文字 もじ にマッチする。上 うえ と同様 どうよう にこれらは混 ま ぜることができる。
^
行 くだり の最初 さいしょ にマッチする。
$
行 くだり の最後 さいご にマッチする。
\(…\)
これに囲 かこ まれた表現 ひょうげん は、後方 こうほう で呼 よ び出 だ すことができる。次 つぎ の \1
, …, \9
の項 こう を参照 さんしょう のこと。
\1
\2
\3
\4
\5
\6
\7
\8
\9
それぞれ「\(
」と「\)
」で囲 かこ まれた部分 ぶぶん に先行 せんこう してマッチした1 - 9 番目 ばんめ の文字 もじ 列 れつ と同 おな じ文字 もじ 列 れつ パターンにマッチする。この機能 きのう は理論 りろん 的 てき には、言 い うならば非 ひ 正規 せいき で(正規 せいき 言語 げんご の記述 きじゅつ 力 りょく を超 こ える)、POSIX 拡張 かくちょう 正規 せいき 表現 ひょうげん では採用 さいよう されていない。
*
1文字 もじ に続 つづ く「*
」は0回 かい 以上 いじょう の表現 ひょうげん の繰 く り返 かえ しにマッチする。例 たと えば「[xyz]*
」は空文字 くうもじ 列 れつ や文字 もじ 列 れつ 「x
」「y
」「zx
」「zyx
」などにマッチする。
n
を1から9までの数字 すうじ としたとき、基本 きほん 正規 せいき 表現 ひょうげん 「\n *
」は「\(
」と「\)
」で囲 かこ まれた部分 ぶぶん の0回 かい 以上 いじょう の繰 く り返 かえ しにマッチする。例 たと えば、基本 きほん 正規 せいき 表現 ひょうげん 「\(a.\)c\1*
」 は文字 もじ 列 れつ 「abcab
」 「abcabab
」「abcababab
」などにマッチするが、文字 もじ 列 れつ 「abcac
」にはマッチしない。
「\(
」と「\)
」で囲 かこ まれた表現 ひょうげん に続 つづ く「*
」は無効 むこう とされる。しかし、一部 いちぶ の環境 かんきょう ではそうならない。
\{m ,n \}
直前 ちょくぜん のブロックの m 回 かい 以上 いじょう n 回 かい 以下 いか の繰 く り返 かえ しにマッチする。例 たと えば、正規 せいき 表現 ひょうげん 「a\{3,5\}
」は文字 もじ 列 れつ 「aaa
」「aaaa
」「aaaaa
」にマッチする。
古 ふる いバージョンのgrepは選言 せんげん 演算 えんざん 子 こ 「\|
」をサポートしていない。
例 れい
正規 せいき 表現 ひょうげん 「.at
」は文字 もじ 列 れつ 「hat
」「cat
」「5at
」のような3文字 もじ の文字 もじ 列 れつ にマッチする
正規 せいき 表現 ひょうげん 「[hc]at
」は文字 もじ 列 れつ 「hat
」と「cat
」にマッチする
正規 せいき 表現 ひょうげん 「[^b]at
」は文字 もじ 列 れつ 「bat
」以外 いがい の「.at
」でマッチする全 すべ ての文字 もじ 列 れつ にマッチする
正規 せいき 表現 ひょうげん 「^[hc]at
」は行 こう の最初 さいしょ にあるときだけ、文字 もじ 列 れつ 「hat
」と「cat
」にマッチする
正規 せいき 表現 ひょうげん 「[hc]at$
」は行 こう の最後 さいご にあるときだけ、文字 もじ 列 れつ 「hat
」と「cat
」にマッチする
符号 ふごう 点 てん の範囲 はんい によってたとえば「アルファベット大文字 おおもじ 」などを表現 ひょうげん しようとすることは、時 とき に問題 もんだい をひきおこす。たとえばロケールに依存 いぞん する例 れい として、エストニア語 ご のアルファベット順 じゅん では、文字 もじ 「s」の後 のち に「z」があり、その後 ご は「t」「u」「v」「w」「x」「y」と続 つづ くので、正規 せいき 表現 ひょうげん 「[a-z]
」ではすべての言語 げんご のすべてのアルファベット小文字 こもじ にマッチするわけではない[注 ちゅう 6] 。そのため、POSIX 標準 ひょうじゅん では次 つぎ の表 ひょう に示 しめ されているクラス、つまり文字 もじ の区分 くぶん を定義 ていぎ している。
POSIX クラスを用 もち いた正規 せいき 表現 ひょうげん [注 ちゅう 7]
対応 たいおう する表現 ひょうげん
意味 いみ
[[:upper:]]
[A-Z]
英語 えいご の大文字 おおもじ
[[:lower:]]
[a-z]
英語 えいご の小文字 こもんじ
[[:alpha:]]
[A-Za-z]
英語 えいご のアルファベット
[[:alnum:]]
[A-Za-z0-9]
アラビア数字 すうじ と英語 えいご のアルファベット
[[:digit:]]
[0-9]
アラビア数字 すうじ
[[:xdigit:]]
[0-9A-Fa-f]
16進 しん 数字 すうじ
[[:punct:]]
[.,!?:...]
英語 えいご の句読点 くとうてん
[[:blank:]]
[ \t]
(半角 はんかく の)スペース とタブ
[[:space:]]
[ \t\n\r\f\v]
(半角 はんかく の)空白 くうはく
[[:cntrl:]]
制御 せいぎょ 文字 もじ
[[:graph:]]
[^ \t\n\r\f\v[:cntrl:]]
印字 いんじ 文字 もじ
[[:print:]]
[^\t\n\r\f\v[:cntrl:]]
印字 いんじ 文字 もじ とスペース
例 れい :正規 せいき 表現 ひょうげん 「[[:upper:]ab]
」は英語 えいご の大文字 おおもじ 「A
」〜「Z
」と「a
」と「b
」のうち1文字 もじ のみにマッチする。
いくつかのツールで使用 しよう できる、POSIX にないクラスとして「[:word:]
」がある。「[:word:]
」は通常 つうじょう 「[:alnum:]
」とアンダースコア からなる。これらが多 おお くのプログラミング言語 げんご で識別子 しきべつし として使用 しよう できる文字 もじ であることを反映 はんえい している。
拡張 かくちょう 正規 せいき 表現 ひょうげん [ 編集 へんしゅう ]
拡張 かくちょう 正規 せいき 表現 ひょうげん はERE [注 ちゅう 8] とも呼 よ ばれる。より現代 げんだい 的 てき な拡張 かくちょう 正規 せいき 表現 ひょうげん は多 おお くの場合 ばあい 、現在 げんざい の UNIX のユーティリティでコマンドライン オプションに「-E
」を含 ふく めることで使用 しよう できる[5] 。
POSIX の拡張 かくちょう 正規 せいき 表現 ひょうげん は伝統 でんとう 的 てき な UNIX の正規 せいき 表現 ひょうげん に似 に ているが、いくつかの点 てん で異 こと なっている。
基本 きほん 正規 せいき 表現 ひょうげん
拡張 かくちょう 正規 せいき 表現 ひょうげん
(対応 たいおう なし)
+
(対応 たいおう なし)
?
(対応 たいおう なし)
|
\{…\}
{…}
\(…\)
(…)
(
\(
)
\)
[
\[
]
\]
.
\.
*
\*
?
\?
+
\+
^
\^
$
\$
例 たと えば、拡張 かくちょう 正規 せいき 表現 ひょうげん 「a\.(\(|\))
」は文字 もじ 列 れつ 「a.)
」や文字 もじ 列 れつ 「a.(
」にマッチする。
GNU Emacs の正規 せいき 表現 ひょうげん [ 編集 へんしゅう ]
GNU find
コマンドにおけるデフォルトの正規 せいき 表現 ひょうげん 文法 ぶんぽう としても用 もち いられる。(findutils-4.2.28)
GNU Emacs Manual - Regexps
Perlの正規 せいき 表現 ひょうげん [ 編集 へんしゅう ]
Perl はPOSIX の拡張 かくちょう 正規 せいき 表現 ひょうげん さえも上回 うわまわ る豊富 ほうふ な文法 ぶんぽう を持 も っている。その例 れい として、POSIXとは異 こと なり、Perlの正規 せいき 表現 ひょうげん には「非 ひ 欲張 よくば り量 りょう 指定 してい 子 こ 」がある。標準 ひょうじゅん の「*
」は、例 たと えば、正規 せいき 表現 ひょうげん 「a.*b
」の「.*
」はできるだけ長 なが い文字 もじ 列 れつ にマッチしようとする。このふるまいを「貪欲 どんよく 」という。たとえば文字 もじ 列 れつ 「a bad dab
」にマッチさせると、全体 ぜんたい にマッチする。これに対 たい し、Perl では使 つか うことができる正規 せいき 表現 ひょうげん 「a.*?b
」の「.*?
」は、マッチするのであれば、できるだけ短 みじか い文字 もじ 列 れつ にマッチする。たとえば文字 もじ 列 れつ 「a bad dab
」に対 たい して「a b
」にだけマッチする。これを「非 ひ 欲張 よくば り量 りょう 指定 してい 子 こ 」と言 い う。
また、Perlには以下 いか の定義 ていぎ 済 ず み文字 もじ クラスがある。
メタ文字 もじ
マッチする対象 たいしょう
\d
アラビア数字 すうじ 、つまり「[0-9]
」
\D
アラビア数字 すうじ 以外 いがい の文字 もじ 、つまり「[^\d]
」
\w
アルファベット、アラビア数字 すうじ またはアンダーバー、つまり「[a-zA-Z_0-9]
」(ロケールに依存 いぞん し、例 たと えばウムラウト付 つ き文字 もじ などの扱 あつか いが変 か わる)
\W
アルファベット、数字 すうじ やアンダーバー以外 いがい の文字 もじ 、つまり「[^\w]
」
\s
空白 くうはく 文字 もじ 、つまり「[ \t\n\r\f]
」(ASCII 文字 もじ 集合 しゅうごう の場合 ばあい )
\S
空白 くうはく 文字 もじ 以外 いがい の文字 もじ 、つまり、[^\s]
すぐれた機能 きのう をもつPerlの拡張 かくちょう 正規 せいき 表現 ひょうげん は、多 おお くのプログラミング言語 げんご やソフトウェアで採 と りいれられている。例 たと えば、Java のPatternクラス 、Python 、Ruby などがそうである。しかし、これらがPerlの正規 せいき 表現 ひょうげん と完全 かんぜん に互換 ごかん である訳 わけ ではない。また、Perl Compatible Regular Expressions (PCRE) と呼 よ ばれる汎用 はんよう の正規 せいき 表現 ひょうげん ライブラリはアプリケーションに組 く み込 こ まれ、Perlの正規 せいき 表現 ひょうげん とほぼ互換 ごかん の機能 きのう を提供 ていきょう する。
正規 せいき 表現 ひょうげん ライブラリ[ 編集 へんしゅう ]
言語 げんご 処理 しょり 系 けい やアプリケーションが正規 せいき 表現 ひょうげん をサポートしていない場合 ばあい であっても、正規 せいき 表現 ひょうげん に必要 ひつよう な処理 しょり を提供 ていきょう する外部 がいぶ ライブラリを導入 どうにゅう することで正規 せいき 表現 ひょうげん を使 つか うことができる。以下 いか にその一 いち 例 れい を挙 あ げておく。
PCRE
Perl互換 ごかん のライブラリ。Exim のために開発 かいはつ され、Apache やPostfix をはじめ、さまざまなソフトウェアに組 く み込 こ まれている[6] 。
鬼 おに 車 しゃ
正規 せいき 表現 ひょうげん オブジェクトごとに異 こと なる文字 もじ エンコーディングを指定 してい できる特徴 とくちょう をもつ。Rubyの1.9系列 けいれつ やPHP の5系列 けいれつ に採用 さいよう されている。macOS 用 よう に検索 けんさく ウィンドウを追加 ついか して移植 いしょく したOgreKit(Oniguruma Regular Expression Framework for Cocoa)が存在 そんざい する[7] 。
鬼 おに 雲 くも
鬼 おに 車 しゃ から派生 はせい した正規 せいき 表現 ひょうげん ライブラリで、Perl 5.10以降 いこう で導入 どうにゅう された機能 きのう をサポートする。Ruby 2.0以降 いこう の標準 ひょうじゅん ライブラリとして利用 りよう されている[8] 。
re2 (英語 えいご 版 ばん )
PCREなどのバックトラック式 しき ではなくオートマトン を用 もち いることで、省 しょう メモリでマッチングを行 おこな うことができる。Google が内部 ないぶ で利用 りよう している。
GNU Regex
GNU Cライブラリ に含 ふく まれているため、Unix系 けい では標準 ひょうじゅん で利用 りよう できる。
Boost.Regex
Boost C++ライブラリ による実装 じっそう 。デフォルトでPerl互換 ごかん の文法 ぶんぽう が使 つか われる[9] が、POSIXやECMAScript などの文法 ぶんぽう プロファイルを任意 にんい に選択 せんたく することもできる[10] 。C++11 規格 きかく にてBoost.Regexのサブセットが標準 ひょうじゅん 化 か された[11] [12] [13] [14] 。
^ 英 えい : historical
^ 英 えい : legacy
^ 英 えい : may be withdrawn
^ 英 えい : simple regular expressions
^ 英 えい : basic regular expression
^ これは正規 せいき 表現 ひょうげん として「[a-z]
」を使用 しよう していたことが原因 げんいん である。
^ 所定 しょてい の文字 もじ 列 れつ を内側 うちがわ の括弧 かっこ およびコロンで囲 かこ って「POSIX クラスを表現 ひょうげん 」し、外側 そとがわ の括弧 かっこ は「その1字 じ のみからなる正規 せいき 表現 ひょうげん を記述 きじゅつ 」している。
^ 英 えい : extended regular expression
^ J. ホップクロフト、R. モトワニ、J. ウルマン『オートマトン言語 げんご 理論 りろん 計算 けいさん 論 ろん I 第 だい 2版 はん 』サイエンス社 しゃ 、2003年 ねん 。ISBN 9784781910260 。
^ 中村 なかむら 克彦 かつひこ 『コンピュータとは何 なに か?』東京電機大学 とうきょうでんきだいがく 出版 しゅっぱん 局 きょく 、2018年 ねん 、156頁 ぺーじ 。"多 おお くの文献 ぶんけん では正則 せいそく 表現 ひょうげん または正規 せいき 表現 ひょうげん と呼 よ んでいるが、数学 すうがく では“regular”の訳語 やくご として「正則 せいそく 」を当 あ てるのが一般 いっぱん 的 てき であり、“expression”は算術 さんじゅつ 式 しき や論理 ろんり 式 しき と同様 どうよう に「式 しき 」と呼 よ ぶべきである"。
^ POSIX > XSH > regexp(3)
^ POSIX > Base Definitions > Regular Expressions > Basic Regular Expressions
^ POSIX > Base Definitions > Regular Expressions > Extended Regular Expressions
^ PCRE - Perl Compatible Regular Expressions
^ https://github.com/kkos/oniguruma
^ https://github.com/k-takata/Onigmo
^ Perl Regular Expression Syntax - 1.81.0
^ syntax_option_type Synopsis - 1.81.0
^ <regex> - cplusplus.com
^ Regular expressions library (since C++11) - cppreference.com
^ 正規 せいき 表現 ひょうげん ライブラリ - cppreference.com
^ regex - cpprefjp C++日本語 にほんご リファレンス
出典 しゅってん は列挙 れっきょ するだけでなく、脚注 きゃくちゅう などを用 もち いてどの記述 きじゅつ の情報 じょうほう 源 げん であるかを明記 めいき してください。記事 きじ の信頼 しんらい 性 せい 向上 こうじょう にご協力 きょうりょく をお願 ねが いいたします。(2023年 ねん 11月 )
言語 げんご 水準 すいじゅん 言語 げんご 処理 しょり 系 けい 言語 げんご 分類 ぶんるい その他 た 関連 かんれん 項目 こうもく