PHPの正規表現と書くとちょっとおかしいかもしれない。正規表現は言語によって書き方にわずかな違いはあるかもしれないけど、基本的な書き方はほぼ同じだと思う。※あくまで個人的な見解です。
正規表現の基本
正規表現は別に覚えなくてもいいとおもうけど、ことあるごとに調べているのがまずい。ということでここにメモしておこうと思う。最近ではグーグルがよくなってきているのでそこに5Gでもくればもはやメモを取る必要すらなくなるだろう。どうでもいいはなしはこのへんにして次。
正規表現でエスケープ処理が必要な文字や記号
正規表現を使うと特定の文字でなにかやろうとするとうまくいかないことがある。なんでだなんでだとなるけど、そういうような文字はエスケープ処理をしてやらないといけない。とはいっても特定の文字の前に\バックスラッシュをつけるだけ
エスケープ処理が必要な記号は以下。
- \
- *
- +
- .
- ?
- {
- (
- [
- ^
- $
- –
- |
- /
決まり文句なので解説することもない。
基本的な正規表現、よくつかいそうなやつのみ
項目 | 説明 |
---|---|
^ | 行頭にマッチ |
$ | 行末にマッチ |
. | 改行以外の任意の1文字にマッチ |
[] | 角括弧内の任意の一文字にマッチ |
[A-Z] | 英大文字A-Zの任意1文字にマッチする |
[a-z] | 英小文字a-zの任意1文字にマッチする |
[0-9] | 数字0-9の任意1文字にマッチする |
[^] | 角括弧内に含まれない1文字にマッチする |
* | 直前の表現を0回以上繰り返す |
+ | 直前の表現を1回以上繰り返す |
? | 直前の表現を0回または1回繰り返す |
{n} | 直前の表現をn回繰り返す。nは整数。 |
このあたりを頭に入れる必要もないけど、正規表現を使いたくなったときにざざっとみれるようにメモ。これ以外にもいろいろあるけど、困ったケースがでてきたらその都度調べる感じで。
PHPの正規表現で使う関数
preg_match()
preg_match関数の基本的な使い方は以下。
// 検索対象となる文字列 $str = 'php regexp hello'; // 正規表現で検索 if( preg_match( '/regexp/', $str) ) // マッチした時の処理 } else { // マッチしなかった時の処理 }
PHP: preg_match – Manual を見てもいいけど、野暮。簡単に書くと以下のような使い方。
preg_match(‘/正規表現/’, 検索文字列, マッチした文字列);
preg_match()は、検索文字列に対し正規表現がマッチしていれば1を返す。1はTrue。でも真偽値がほしいわけではなく、マッチした文字列を抽出したい場合は、第3引数になんでもよいので変数をいれてやる必要がある。PHPの関数は、まえぶれもなくポンとでてくるので一風変わっているきがする。preg_matchはマッチしたものが見つかれば検索をやめる。
preg_match_all()
preg_match_all()はpreg_matchと書き方は同じ。preg_match_allは繰り返し正規表現検索を行う。
preg_replace()
phpのpreg_replace()は正規表現にマッチした文字列を特定の文字列に置換する。 PHP: preg_replace – Manual をみてもよいが、あいかわらず野暮。
簡単に書くと以下のようになる。
preg_replace(‘/正規表現/’, ‘置き換え後文字列’, 検索文字列)
preg_replace()は、preg_match()とかとは違い、置き換え後の文字列を返すので、変数とかで受け取る。
$str = 'hoge'; $str = preg_replace('/hoge/', 'fuga', $str); echo $str; //fuga
※上記コードは動作確認済み。
実例
複数の数字に一致させたいときはこんな感じで使う。
preg_match( '/^ID[0-9]*$/', $str);
半角英数字を0~3字書く
preg_match( '/^dog[0-9a-zA-Z]{0,3}$/', $str);
検索する文字に記号を使う。※こちらは最初に書いたエスケープ処理が必要な文字のこと
preg_match( '/dog\?/', $str); // ?はエスケープ処理が必要
このあたりをおさえておけば大体対応できると思う。※あくまで個人的な見解です。
コメント