php 置換えとかで使う正規表現について

2011/04/01

PHPのpreg_replace()とかで使う正規表現についてまとめてみた。

  1. $str = "abcdabcdda";
  2.  
  3. // 特定の文字を除く
  4. echo '「d」を除いた文字全部:' . preg_replace('/[^d]/', 'z', $str) . "\n";
  5. //結果:「d」を除いた文字全部:zzzdzzzddzz
  6.  
  7. // 特定の文字のみ
  8. echo '「a」と「c」:' . preg_replace('/[ac]/', 'z', $str) . "\n";
  9. //結果:「a」と「c」:zbzdzbzddz
  10.  
  11. // 直前の文字が0個or1個
  12. echo '「da」or「a」:' . preg_replace('/d?a/', 'z', $str) . "\n";
  13. //結果:「da」or「a」:zbczbcdz

最長一致と最短一致

マッチする文字が複数あったときの処理。
「リンゴ、ミカン、リンゴ、メロン、ミカン、メロン」って文字があり「リンゴ~メロン」を一致させる場合、「最長一致」ってヤツは「最後のメロン」までが一致で「リンゴ、ミカン、リンゴ、メロン、ミカン、メロン」が対象になる。
「最短一致」ってヤツは最初の「メロン」までが一致で「リンゴ、ミカン、リンゴ、メロン」が対象になる。

  1. $str = "abcdabcdda";
  2.  
  3. // 「a]のあとに任意の文字があり最後に表示される「d」まで。
  4. echo '最長一致:' . preg_replace('/a.*d/', 'z', $str) . "\n";
  5. //結果:最長一致:za
  6.  
  7. // 「a]のあとに任意の文字があり次に表示される「d」まで。
  8. echo '最短一致:' . preg_replace('/a.*?d/', 'z', $str) . "\n";
  9. //結果:最短一致:zzda

0回以上と1回以上

0回以上ってことは含まなくてもOK。
「リンゴ、ミカン、リンゴ、メロン、ミカン、メロン」って文字があり「ミカンが0回以上で続いてメロン」を対象とするなら「メロン」と「ミカン、メロン」が対象になる。
「ミカンが1回以上で続いてメロン」を対象とするなら「ミカン、メロン」が対象になる。

  1. $str = "abcdabcdda";
  2.  
  3. // 「a」or「da」or「dda」or「ddda」とか
  4. echo '0文字以上:' . preg_replace('/d*a/', 'z', $str) . "\n";
  5. //結果:0文字以上:zbczbcz
  6.  
  7. // 「da」or「dda」or「ddda」とか
  8. echo '1文字以上:' . preg_replace('/d+a/', 'z', $str) . "\n";
  9. //結果:1文字以上:abczbcz

サンプル

複数の半角スペースを一つにする

// ['/ * /'] = 0文字以上の半角スペースのあとに半角スペースがある。
$repStr = preg_replace('/ * /', " ", $Str);

 など特殊文字(エンティティ)とかを全角スペースに変換

$ort = preg_replace('/&[a-zA-Z0-9[:punct:]].+?;/', " ", $ort);

 など特殊文字(エンティティ)とは、「[&][;]の間に英数字と記号」が含まれている。

ということで、まず「&」。
次に「英数字と記号」をマッチさせる。「[a-zA-Z0-9[:punct:]]」の中の「a-zA-Z0-9」が英数字。「[:punct:]」が記号。
英数字と記号が複数回表示されるってのが「.+」。最短一致させるので「?」。
最後に「;」が表示されるもの。

// 最短一致と最長一致のサンプル(?の有無)
$str = “ recatnap ”;

$ort = preg_replace('/&[a-zA-Z0-9[:punct:]].+?;/', " ", $str);
// 最短一致での結果(?アリ):「 recatnap 」

$ort = preg_replace('/&[a-zA-Z0-9[:punct:]].+;/', " ", $str);
// 最長一致での結果(?ナシ):「 」

半角数字だけの場合、削除

// ['/^[0-9]+$/'] = 半角数字から始まり、1文字以上半角数字で、半角数字で終る
$repStr = preg_replace('/^[0-9]+$/', "", $Str);

サンプルとかのまとめ:php 正規表現のサンプル

新着(ニュース関連以外)

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい