お知らせ

次の項目は別ページに分割しました。

数字に合致させる

参考:

数字のみをマッチする表現 | WWW クリエイターズ

単語に合致させる

  • \b単語の先頭または末尾に合致する
  • \B単語の先頭及び末尾以外に合致する

参考:

「\b、\B」 – 単語の先頭と単語の末尾にマッチする | Let’s プログラミング

日本語文字に合致させる

参考:

漢字、ひらがな、カタカナにマッチさせる方法 | so-zou.jp

Unicode で「漢字」の正規表現 | ものかの

日本語の間の空白を取り除く | 銀ねこアトリエ

Unicode ブロック – Wikipedia

キャプチャ/グルーピング

キャプチャせずにグループ化する。

(?:hi|hello|bye)

参考:

丸括弧を使ったグループ化 | Let’s プログラミング

キャプチャグループを使って正規表現パターンの一部にマッチした文字列を取得する | Let’s プログラミング

キャプチャしない丸括弧 | Tips というかメモ

キャプチャしない正規表現は () にする・・・って、え? | 負け犬プログラマーの歩み

何にも合致しない正規表現

(?!.*)

参考:

何にもマッチしない正規表現いろいろ – Qiita

正規表現 `$^` は何にマッチするか/アンカーの正しい理解に向けた確認 – Qiita

Regex to *not* match any characters – Stack Overflow

ハイフン

参考:

正規表現の文字クラスにハイフンを含みたいときは、ハイフンを最初または最後に書く | My External Storage

ハイフンの判定 | 作業メモ

最短マッチ

*? は最左最短マッチを意味する。合致の開始位置が最も左で、合致長さが短いものが選択される。

# Ruby "<<<hoge>>>".match(/<.*?>/)[0] # => "<<<hoge>"
Code language: Ruby (ruby)

参考:

.*? は最短マッチではない – Qiita

正規表現の最短マッチと最長マッチについて | 小粋空間

最短一致でマッチさせる表現 | WWW クリエイターズ

後方参照

参考:

後方参照によるパターン内での参照 – Perl | Let’s プログラミング

後方参照 – Ruby | Let’s プログラミング

後方参照 | 現代の JavaScript チュートリアル

Backreferences to Match the Same Text Again | Regular-Expressions.info

先読み/後読み/戻り読み

  • (?=pattern)先読み
  • (?!pattern)否定先読み
  • (?<=string)後読み (=戻り読み)
  • (?<!string)否定後読み (=否定戻り読み)

特定のパターンを含まない行を探す。

^(?!.*PATTERN).+$

特定のパターンをいずれも含まない行を探す。

^(?!.*PATTERN_A|PATTERN_B).+$

特定のパターンで始まらない行を探す。

^(?!PATTERN).+$

特定のパターンで終わらない行を探す。

^(?!.*PATTERN$).+$

パターンAを含まないが、パターンBを含む行を探す。

^(?!.*PATTERN_A).*(?=PATTERN_B).*$

参考:

否定先読み、肯定先読みについて | WWW クリエイターズ

文字列を含まない/否定の表現まとめ | WWW クリエイターズ

正規表現で文字列を含まない、否定の記述 | UX MILK

指定した文字列を含まない行を検索する方法 | buralog

否定の正規表現の書き方/~ではない行/~を含まない行 | 株式会社 AMG Solution

正規表現の先読み/後読みを極める! | あらびき日記

前後読み/先読みと戻り読み | Tips というかメモ

Lookahead and Lookbehind Zero-Length Assertions | Regular-Expressions.info

バックトラック

参考:

正規表現のパフォーマンスの話をされても全くピンと来なかった僕は、backtrack に出会いました – Qiita

`.*` や `.+` がバックトラックで不利な理由 | TechRacho

正規表現のコストパフォーマンスについて | リグレックス株式会社

パフォーマンスを意識して正規表現を書く | Shin x Blog

破壊的なバックトラック | 現代の JavaScript チュートリアル

What does “?>” mean in a PCRE regex? – Stack Overflow

パフォーマンス

参考:

regex クレートを歩く 固定文字検索編 | しばイヌとお茶

絶対最大量指定子

「円」の付かない数字に合致させる。

\d++(?!円)

または、絶対最大量指定子を使わない場合は次のようにする。

\d+(?!円|\d)

参考:

絶対最大量指定子の使いどころ – Qiita

絶対最大量指定子について – Qiita

非包含オペレータ

非包含オペレータを使用して、C言語のコメントブロックに合致させる。

\/\*(?~\*\/)\*\/
代替
  • 最短一致\/\*.*?\*\/
  • バックトラックの抑制\/\*(?>.*?\*\/)
  • 否定先読み\/\*((?!\*\/).)*\*\/

参考:

鬼雲に非包含オペレータを実装した話 – Qiita

Ruby 2.4.1 新機能: Onigmo 正規表現の非包含演算子 (?~ ) をチェック | TechRacho

The New ‘Absent Operator’ in Ruby’s Regular Expressions | Peter Cooper (Ruby Inside)

正規表現における非包含オペレータの提案 (スライド/PDF) | 田中哲 (staff.aist.go.jp)

正規表現における非包含オペレータの提案 (論文/PDF) | 田中哲 (staff.aist.go.jp)

パターンマッチング/文字列アルゴリズム

  • 総当たり/ブルートフォース
  • クヌース・モリス・プラット法 (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

Bitap アルゴリズム – Wikipedia

ラビン-カープ文字列検索アルゴリズム – Wikipedia

トライ – Wikipedia

接尾辞配列 – Wikipedia

FM-index – Wikipedia

空白の扱い

参考:

RegEx for Horizontal Whitespace (\s \h blank etc) – Keyboard Maestro Discourse

まとめ/チートシート/Tips

参考:

VS Code でカンタン!正規表現置換のためのチートシート | 銀ねこアトリエ

sed コマンドで覚えておきたい使い方 12個 (+3個) | 俺的備忘録 なんかいろいろ

正規表現あれこれ – Qiita

オンラインツール

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

Examples | Regular-Expressions.info

Reference | Regular-Expressions.info

記事をシェアする:

コメントを残す

メールアドレスが公開されることはありません。

Protected by reCAPTCHA