お知らせ

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

数字に合致させる

参考:

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

単語に合致させる

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

参考:

「\b、\B」 – 単語の先頭と単語の末尾にマッチする | JavaDrive

日本語文字に合致させる

参考:

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

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

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

Unicode ブロック – Wikipedia

全角文字/半角カナ

参考:

Ruby で全角半角を判定 | うめすこんぶ

漢字

  • \p{Han}Unicode プロパティで漢字に一致させる (日中韓)

参考:

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

Han – UnicodeSet Utilities | Unicode [Official]

Unicode 文字プロパティ

標準でサポートされている言語
  • PHP
  • Ruby
  • JavaScript
  • Perl
外部ライブラリでサポートされている言語

参考:

Unicode 文字プロパティ #1 概要 – Qiita

Unicode プロパティを用いた正規表現で日本語を抽出 | 株式会社シーポイントラボ

ユニコード文字プロパティについて | JS.next

Unicode 文字プロパティ | PHP Manual [公式]

Property Value Lists – Character Database | Unicode [Official]

Property Value Aliases – Character Database | Unicode [Official]

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

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

(?:hi|hello|bye)

参考:

丸括弧を使ったグループ化 | JavaDrive

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

キャプチャしない丸括弧 | 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 | JavaDrive

後方参照 – Ruby | JavaDrive

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

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)

参考:

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

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

非包含オペレータ

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

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

参考:

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

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

Bitap アルゴリズム – Wikipedia

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

トライ – Wikipedia

接尾辞配列 – Wikipedia

FM-index – Wikipedia

空白の扱い

参考:

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

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

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

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

正規表現あれこれ – Qiita

正規表現いろいろ (jQuery) – 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