正規表現

PHP では、「Perl 互換正規表現」 (PCRE / Perl Compatible Regular Expressions) を用いて正規表現が実装されている。

公式サイト:

Perl 互換正規表現 (PCRE) | PHP Manual [Official]

使い方

参考:

正規表現メモ (yamikoo) – Qiita

正規表現メモ (tsuuuuu_san)- Qiita

PHP の正規表現の基本的な使い方 | Web Design Leaves

正規表現メモ | KeiTips

正規表現 | so-zou.jp

初心者向け基本/早見表掲載! | WEPICKS!

正規表現の使い方まとめ | エンジニアの入り口

書き方

参考:

PCRE 正規表現構文 | PHP Manual [公式]

メタ文字

  • \エスケープ文字
  • ^検索対象の先頭/複数行モードでは行頭
  • $検索対象の終端/複数行モードでは行末
  • .任意の一文字 (改行を除く)
  • []文字クラス
  • |選択肢
  • ()サブパターンを定義する
  • ?0 または 1 回の合致
  • *0 回以上の繰り返し
  • +1 回以上の繰り返し
  • {n,m}n 回以上 m 回以下の繰り返し

参考:

メタ文字 | PHP Manual [公式]

略記法

  • \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]

参考:

よく使用される文字クラスの略記 | Let’s プログラミング

正規表現/PCRE 関数メタ文字や特殊記法 | ajisaba.net

オプション/修飾子/モード指定

  • i大文字小文字を区別しない (PCRE_CASELESS)
  • m改行を含む複数行に対してマッチを実行する (PCRE_MULTILINE)
  • x空白は無視されてコメントを記入できるモード (PCRE_EXTENDED)

参考:

正規表現で使えるオプション/パターン修飾子まとめ | PisukeCode

PHP の正規表現 (preg系) のパターン修飾子 | You Look Too Cool

パターン修飾子 | PHP Manual [公式]

内部オプション設定 | PHP Manual [公式]

文字クラス

参考:

文字クラス | PHP Manual [公式]

繰り返し/量指定子

参考:

繰り返し |  PHP Manual [公式]

文字をエスケープする

参考:

エスケープが必要な文字一覧 | WWW クリエイターズ

エスケープシーケンス | PHP Manual [公式]

置換 (preg_replace)

正規表現に合致する文字列の置換を実行する。

参考:

preg_replace | PHP Manual [公式]

preg_replace_callback | PHP Manual [公式]

検索 (preg_match)

正規表現に合致する文字列の検索を実行する。

参考:

文字列を正規表現でマッチング検索をする preg_match / preg_match_all 関数の使い方 | トリオス

preg_match | PHP Manual [公式]

合致する文字列を全て検索する (preg_match_all)

フラグ
  • PREG_PATTERN_ORDERパターン順 (デフォルト)
  • PREG_SET_ORDER合致順
  • PREG_OFFSET_CAPTUREオフセット/バイト単位の合致位置を配列に含める
  • PREG_UNMATCHED_AS_NULL合致しなかったサブパターンを NULL で返す/このフラグを指定しなかった場合、空文字列を返す

参考:

PHP の正規表現で抽出した要素に任意のキーをつける | Unskilled?

preg_match_all | PHP Manual [公式]

preg_match_all() Function | W3Schools

分割 (preg_split)

境界のパターンを正規表現で指定して文字列を分割する。

$result = preg_split( '/[, ]+/''Hello, World' );
var_dump( $result );Code language: PHP (php)

日本語を一文字ずつに分割する。

$result = preg_split(
    '//u''吾輩は猫である。名前はまだ無い。', -1,
    PREG_SPLIT_NO_EMPTY
);
var_dump( $result );Code language: PHP (php)

参考:

preg_split – 文字列を配列にする | ITSakura

PHP で日本語の文字列を一つずつ配列に格納する方法 | オノログ

PHP で日本語を1文字ずつ分解する方法 | You Look Too Cool

PHP で日本語を含む文字列を一文字ずつ配列に分割させる方法 | 動かざることバグの如し

preg_split の文字化けを回避する | 怪しい物を開発するブログ

正規表現で置換しつつ何文字目か取得する | itte

preg_split – 正規表現で文字列を分割する | phpspot

preg_split | PHP Manual [公式]

マルチラインモード

パターンに修飾子として m を指定すると、改行を含む複数行に渡ってパターンを探す。(PCRE_MULTILINE)

preg_match( '/<p>([^<>]*)<\/p>/m', $text, $matches );
$content = $matches[1];Code language: PHP (php)

参考:

改行を含めて、複数行でマッチングする方法 | WWW クリエイターズ

パターン修飾子 m / s | Tips というかメモ

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

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

参考:

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

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

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

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

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

Unicode

Unicode 文字をコードポイントで指定するには、\x{...} の形式で表記する。

  • \x{00a0}No-Break Space

参考:

正規表現中のユニコードの表記に注意する | Neareal

PHP で漢字を表す正規表現 | You Look Too Cool

すべて漢字かどうか調べる | ぺんたん info

PCRE は Unicode 文字プロパティをサポートするとは限らない | hnw の日記

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

複雑な条件の正規表現でハマっています – teratail

UTF-8

処理対象の文字列、あるいは、パターンが Unicode 文字を含んでいる場合は、パターンに u 修飾子を付与する。(PCRE_UTF8)

参考:

preg 系で日本語を使う場合、パターン修飾子 u は不可欠 | すたら日記

PHP の preg_replace には u 修飾子をつけた方がいい | かたつむりくんの WWW

u (PCRE_UTF8) | PHP Manual [公式]

preg_replace with Unicode chars – Stack Overflow

preg_match and UTF-8 in PHP – Stack Overflow

Unicode 文字プロパティ

参考:

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

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

preg_replace_callback

正規表現に合致する度にコールバック関数を呼び出して処理を行う。

  • 第1引数 ($pattern)正規表現で記述されたパターン
  • 第2引数 ($callback)コールバック関数 (関数名を文字列で指定するか、あるいは、無名関数を与える。)
  • 第3引数 ($subject)置換の対象とする文字列
  • 第4引数 ($limit = -1)パターンを検索する最大回数を指定する。-1 を指定した場合は無制限に検索を実行する。(省略可能/デフォルト-1)
  • 第5引数 (&$count = null)合致した回数を格納する変数への参照 (省略可能/デフォルトnull)
  • 第6引数 ($frags = 0)マッチ配列の形式を指定するフラグ (省略可能/デフォルト0)

参考:

preg_replace_callback | PHP Manual [公式]

mb_ereg_replace

マルチバイト文字列に対して正規表現による置換を行う。

参考:

正規表現を利用した文字列の置換処理 | iPentec

mb_ereg_replace | WEB 道

preg_replace と mb_ereg_replace の違いと注意点 | Codaholic

mb_ereg_replace() | 箱庭の物見窓

mb_ereg_replace | PHP Manual [公式]

PCRE

「Perl 互換正規表現」 (PCRE / Perl Compatible Regular Expressions)

こちらのページを参照

参考:

PCRE Pattern Specification | PCRE Documentation [Official]

まとめ/チートシート

PHP の正規表現 | ぺんたん info

Learn PCRE in Y Minutes | Learn X in Y minutes

PCRE Regular Expression Cheatsheet | Debuggex

オンラインツール

正規表現チェッカー | okumocchi.jp

Regex101 – Build, Test, and Debug Regex

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA