LoginSignup
0
0

Laravelに向けたPHPの正規表現

Posted at

正規表現とは

パターンを指定して、文字列を検索したり置き換えたりする方法のことです。
プログラミング初心者の方はピンと来ないと思います。汗

正規表現は英語で Regular expression

プログラミング言語やエディタ上では略して、RegexRegexpと書かれることが多いので、英語の略称も知っていると役に立つみたいです。

メタ文字

^ 、[ ]、{ }、$ などは本来の文字とは違う特殊な意味があります。
このような特殊な意味を持つ文字を「メタ文字」と呼びます。

メタ文字には2種類あります。

  1. 角カッコ内を除き、 パターン中のどこででも使用できる文字
  2. 角カッコで括られた中(文字クラス)でだけ使用できる文字

正規表現一覧

マッチングと置き換え

説明
preg_match 文字列内でパターンにマッチする箇所を検索
preg_match_all 文字列内でパターンにマッチするすべての箇所を検索
preg_replace 文字列内のパターンにマッチする箇所を別の文字列で置換
メタ文字 説明
. 任意の1文字
^ 先頭一致
$ 終端一致
0-9 0から9まで
[a-z] a~zまで
abc aまたはbまたはc
^abc aまたはbまたはc以外
[] 文字クラス作成
{n} n回繰り返し
\w 半角英数字とアンダースコア
\W 任意の英数字またはアンダースコア以外の文字
\d 数値
\D 任意の数値意外とマッチ
\s 空白文字
\S 任意の空白文字以外の文字とマッチ

正直パターンが多すぎるので資料のドキュメントから調べてみたください。

正規表現を使ってみる

試しに検索してみます。

<?php
$char = 'aAbBcC_ss_rr';
if(preg_match("/aAb/",$char,$result)){//この箇所で検索
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};

//検索できたArray ( [0] => aAb )

aAbを検索したら別の検索のやり方をやっていきます。

<?php
$char = 'aAbBcC_ss_rr';
if(preg_match("/\wbB/",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};

//検索できたArray ( [0] => AbB )

iをつけると大文字小文字は区別しないということなります。

<?php
$char = 'aAbBcC_ss_rr';
if(preg_match("/\wbb/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};

//検索できたArray ( [0] => AbB )

[a-z]でやってみると

<?php
$char = 'aAbBcC_ss_rr';
if(preg_match("/[a-z]bb/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};

//検索できたArray ( [0] => AbB )

上のように検索できます。次は{}を使っていきます。
aからzとAからZを{6}回の繰り返しで検索します。

<?php
$char = 'aAbBcC_ss_rr';
if(preg_match("/[a-zA-Z]{6}/",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] => aAbBcC )

{1,5}にすると1文字以上4文字以下で検索ということになります。

<?php
$char = 'aAbBcC_ss_rr';
if(preg_match("/[a-zA-Z]{1,4}/",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] => aAbB )

$は後方一致、{1,}は1文字以上という意味です。

<?php
$char = 'aAbBcC_ss_rr';
if(preg_match("/[a-zA-Z]{1,}$/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] => rr )

^なら前方一致となります。

<?php
$char = 'aAbBcC_ss_rr';
if(preg_match("/^[a-zA-Z]{1,}/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] => aAbBcC )

5とかが入ると検索できなくなります。

<?php
$char = '5aAbBcC_ss_rr';
if(preg_match("/^[a-zA-Z]{1,}/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] => rr )

こうすれば数字も検索できます。

<?php
$char = '5aAbBcC_ss_rr';
if(preg_match("/^[0-9a-zA-Z]{1,}/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] => 5aAbBcC )

^を[]の中に入れると挙動は変わります。

<?php
$char = '5aAbBcC_ss_rr';
if(preg_match("/[^a-zA-Z]{1,}/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] => 5 )

[^a-zA-Z]は文字以外となります。
{2,}とかにすると変わってきます。

<?php
$char = '5aAbBcC30_ss_rr';
if(preg_match("/[^a-zA-Z]{2,}/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] => 30_ )

.を使って2文字以上の繰り返しということになります。

<?php
$char = '5aAbBcC30_ss_rr';
if(preg_match("/.{2,}/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できた( [0] => 5aAbBcC30_ss_rr )

HTMLタグを使っていきます。

<?php
$char = '<h2>5aAbBcC30_ss_rr</h2>';
if(preg_match("/<h2>.{2,}<\/h2>/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] =>
//5aAbBcC30_ss_rr
//)

タグの中身のみをとる場合は

<?php
$char = '<h2>5aAbBcC30_ss_rr</h2>';
if(preg_match("/<h2>(.{2,})<\/h2>/i",$char,$result)){
    echo '検索できた';
    print_r($result);
} else {
    echo '検索できなかった';
};
//検索できたArray ( [0] =>
//5aAbBcC30_ss_rr

//[1] => 5aAbBcC30_ss_rr )

正規表現は覚える必要がない

正規表現はプロの開発者でも全部覚えている人はいないです。
調べながら実装していきます。

有益資料、ドキュメント

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0