概要
ある一定のパターンの文字列を探索、あるいは置換するために用いられる、パターンの表現形式。細かい実装が異なることはあるが、多くの処理系で、共通した記述規則を用いてパターンを定義できる。
- メタ文字
- 量指定子
- 文字クラス
- 略記法
- 修飾子
参考:
メタ文字
\
: エスケープ文字^
: 検索対象の先頭/複数行モードでは行頭$
: 検索対象の終端/複数行モードでは行末.
: 任意の一文字 (改行を除く)[]
: 文字クラス|
: 選択肢()
: サブパターンを定義する?
: 0 または 1 回の合致*
: 0 回以上の繰り返し+
: 1 回以上の繰り返し{n}
: n 回の繰り返し{n,m}
: n 回以上 m 回以下の繰り返し
参考:
ドット (.) – 任意の一文字にマッチする | JavaDrive
キャレット (^)/ドル記号 ($) – 文字列の先頭と文字列の末尾の位置にマッチする | JavaDrive
縦棒 (|) – 複数のパターンのどれかにマッチする | JavaDrive
量指定子
?
: 0 または 1 回の合致*
: 0 回以上の繰り返し+
: 1 回以上の繰り返し{n}
: n 回の繰り返し{n,m}
: n 回以上 m 回以下の繰り返し
参考:
直前の文字の繰り返し (*、+、?、{num}、{min,max}) | JavaDrive
正規表現の Greedy と Lazy | ほしかったあのスキルを手に入れよう
貪欲と怠惰な量指定子 | 現代の JavaScript チュートリアル
なぜ、量指定子 + は貪欲ではないのか – teratail
Greedy & Lazy match in Regular Expression | Mehul Lakhanpal
Regex Non-greedy (or Lazy) Quantifiers | PHP Tutorial
Greedy and Lazy Quantifiers | W3docs
Greedy and Lazy Quantifiers | RIP Tutorial
What do ‘lazy’ and ‘greedy’ mean in the context of regular expressions? – Stack Overflow
How can I write a regex which matches non greedy? – Stack Overflow
Why is this regex not greedy? – Stack Overflow
文字クラス
[]
: 文字クラス
参考:
POSIX Bracket Expressions | Regular-Expressions.info
略記法
略記法は、環境や使用言語によって使えない場合や定義が異なる場合がある。Perl 互換あるいは GNU 互換で実装されている場合には、基本的なものは概ね共通して使用できる。
\d
: 数字[0-9]
\D
: 数字以外[^0-9]
\h
: 水平スペース[ \t\xa0]
\H
: 水平スペース以外\s
: スペース[ \t\r\n\v\xa0\x85]
\S
: スペース以外\v
: 垂直スペース[\r\n\v\x85]
\V
: 垂直スペース以外\w
: 単語を構成する文字[_0-9A-Za-z]
\W
: 単語を構成する文字以外[^_0-9A-Za-z]
参考:
バックスラッシュ (\) + 文字を使った文字クラスの略記法 | JavaDrive
Generic Character Types | pcre2pattern specification (PCRE) [Official]
エスケープ
参考:
正規表現でメタ文字をエスケープして通常の文字として扱う | JavaDrive
修飾子/モード指定
i
: 大文字小文字を区別しない (ケースレスモード)m
: 改行を含む複数行に対してマッチを実行する (マルチラインモード)x
: 空白は無視されてコメントを記入できるモード (フリーフォーマットモード/コメントモード)
参考:
Internal Option Setting | pcre2pattern specification (PCRE) [Official]
フリーフォーマットモード
参考:
パターンの中の空白やコメントを無視する (/x 修飾子) | JavaDrive
正規表現の中にコメントを含める、/x オプションによるフリーフォーマット記法について | このすみ技術ろぐ
clean up regex – Stack Overflow
正規表現エンジン
参考:
Comparison of Regular-Expression Engines – Wikipedia
まとめ
What does this regex mean? – Stack Overflow
オンラインツール
Regex101 – Build, Test, and Debug Regex
鬼車 (Oniguruma)
リポジトリ:
kkos/oniguruma: Regular Expression Library – GitHub
参考:
鬼車 正規表現 (RE.ja) – kkos/oniguruma – GitHub
鬼雲 (Onigumo)
リポジトリ:
k-takata/Onigmo: Onigmo is a regular expressions library forked from Oniguruma – GitHub
参考:
RE2
正規表現ライブラリ
リポジトリ:
参考:
高速かつ省メモリな Google の正規表現ライブラリ RE2 についてのメモ | naoya_t@hatenablog