概要
「正規表現」は、ある一定のパターンの文字列を探索、あるいは置換するために用いられる、パターンの表現形式である。細かい実装が異なることはあるが、多くの処理系で共通した記述規則を用いてパターンを定義できる。
記法の種類
- メタ文字
 - 量指定子
 - 文字クラス
 - 略記法
 - 修飾子
 
参考:
メタ文字
\: エスケープ文字^: 検索対象の先頭/複数行モードでは行頭$: 検索対象の終端/複数行モードでは行末.: 任意の一文字 (改行を除く)[]: 文字クラス|: 選択肢(): サブパターンを定義する?: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]
ドキュメント:
Generic Character Types | PCRE2 Pattern Specification [Official]
参考:
バックスラッシュ (\) + 文字を使った文字クラスの略記法 | JavaDrive
エスケープ
参考:
正規表現でメタ文字をエスケープして通常の文字として扱う | JavaDrive
修飾子/モード指定
i: 大文字小文字を区別しない (ケースレスモード)m: 改行を含む複数行に対してマッチを実行する (マルチラインモード)x: 空白は無視され、コメント記法が使用できるモード (フリーフォーマットモード/コメントモード)
ドキュメント:
Internal Option Setting | PCRE2 Pattern Specification [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