次の項目は別ページに分割しました。
数字に合致させる
参考:
単語に合致させる
\b
:単語の先頭または末尾に合致する\B
:単語の先頭及び末尾以外に合致する
参考:
「\b、\B」 – 単語の先頭と単語の末尾にマッチする | JavaDrive
日本語文字に合致させる
参考:
漢字/ひらがな/カタカナにマッチさせる方法 | so-zou.jp
全角文字/半角カナ
参考:
漢字
\p{Han}
:Unicode プロパティで漢字に一致させる (日中韓)
参考:
Han – UnicodeSet Utilities | Unicode [Official]
Unicode 文字プロパティ
標準でサポートされている言語
- PHP
- Ruby
- JavaScript
- Perl
外部ライブラリでサポートされている言語
- Python:regex / onigurumacffi
参考:
Unicode プロパティを用いた正規表現で日本語を抽出 | 株式会社シーポイントラボ
Unicode 文字プロパティ | PHP Manual [公式]
Property Value Lists – Character Database | Unicode [Official]
Property Value Aliases – Character Database | Unicode [Official]
キャプチャ/グルーピング
キャプチャせずにグループ化する。
(?:hi|hello|bye)
参考:
キャプチャグループを使って正規表現パターンの一部にマッチした文字列を取得する | JavaDrive
キャプチャしない正規表現は () にする・・・って、え? | 負け犬プログラマーの歩み
何にも合致しない正規表現
(?!.*)
参考:
正規表現 `$^` は何にマッチするか/アンカーの正しい理解に向けた確認 – Qiita
Regex to *not* match any characters – Stack Overflow
ハイフン
参考:
正規表現の文字クラスにハイフンを含みたいときは、ハイフンを最初または最後に書く | My External Storage
最短マッチ
*?
は最左最短マッチを意味する。合致の開始位置が最も左で、合致長さが短いものが選択される。
# Ruby
"<<<hoge>>>".match(/<.*?>/)[0]
# => "<<<hoge>"
Code language: Ruby (ruby)
参考:
後方参照
参考:
後方参照によるパターン内での参照 – Perl | JavaDrive
Backreferences to Match the Same Text Again | Regular-Expressions.info
バックトラック
参考:
正規表現のパフォーマンスの話をされても全くピンと来なかった僕は、backtrack に出会いました – Qiita
`.*` や `.+` がバックトラックで不利な理由 | TechRacho
正規表現のコストパフォーマンスについて | リグレックス株式会社
パフォーマンスを意識して正規表現を書く | Shin x Blog
破壊的なバックトラック | 現代の JavaScript チュートリアル
What does “?>” mean in a PCRE regex? – Stack Overflow
パフォーマンス
参考:
regex クレートを歩く 固定文字検索編 | しばイヌとお茶
絶対最大量指定子
「円」の付かない数字に合致させる。
\d++(?!円)
または、絶対最大量指定子を使わない場合は次のようにする。
\d+(?!円|\d)
参考:
非包含オペレータ
非包含オペレータを使用して、C言語のコメントブロックに合致させる。
\/\*(?~\*\/)\*\/
代替
- 最短一致:
\/\*.*?\*\/
- バックトラックの抑制:
\/\*(?>.*?\*\/)
- 否定先読み:
\/\*((?!\*\/).)*\*\/
参考:
Ruby 2.4.1 新機能: Onigmo 正規表現の非包含演算子 (?~ ) をチェック | TechRacho
The New ‘Absent Operator’ in Ruby’s Regular Expressions (Peter Cooper) | Ruby Inside
正規表現における非包含オペレータの提案 (スライド/PDF) | 田中哲
正規表現における非包含オペレータの提案 (論文/PDF) | 田中哲
パターンマッチング/文字列アルゴリズム
- 総当たり/ブルートフォース
- クヌース・モリス・プラット法 (KMP)
- ボイヤー・ムーア法 (Boyer-Moore)
- Bitap
- ラビン・カープ (Rabin-Karp)
- トライ木/プレフィックス木 (Trie Tree / Prefix Tree)
- 正規表現
- DFA 型:決定性有限オートマトン (DFA) に変換する。
- VM 型:仮想マシン (VM) 上のバイトコードに変換して実行する。
- 接尾辞配列 (Suffix Array)
- 接尾辞木 (Suffix Tree)
- Burrows-Wheeler 変換
- FM-index
参考:
文字列アルゴリズムの学びかた | Hatena Developer Blog
ボイヤー-ムーア文字列検索アルゴリズム – Wikipedia
ラビン-カープ文字列検索アルゴリズム – Wikipedia
空白の扱い
参考:
RegEx for Horizontal Whitespace (\s \h blank etc) – Keyboard Maestro Discourse
まとめ/チートシート/Tips
VSCode でカンタン!正規表現置換のためのチートシート | 銀ねこアトリエ
sed コマンドで覚えておきたい使い方 12個 (+3個) | 俺的備忘録
オンラインツール
Regex101 – Build, Test, and Debug Regex
Regular-Expressions.info
公式サイト:
Regular-Expressions.info – Tutorial, Examples and Reference
参考:
Quick Start | Regular-Expressions.info
Tutorial – Learn How to Use Regular Expressions | Regular-Expressions.info
Tools, Utilities and Programming Languages | Regular-Expressions.info