【PHP】正規表現で否定の条件を指定する。

めも。

否定先読み表現を用いる。

例えば下記のような感じ。

$str = 'aaabbbcccddd';

$pt = '/^(?!.*abbbc).*$/';

$res = preg_match($pt, $str);

var_dump($res);

↓

int(0)

上記は$strの中に「abbbc」という文字が含まれていない場合に1を返す。今回は「abbbc」が含まれているため0が返される。
パターンを下記の様にした場合は当然1が返却される。

$str = 'aaabbbcccddd';

$pt = '/^(?!.*abbc).*$/';

$res = preg_match($pt, $str);

var_dump($res);

↓

int(1)

否定の条件が作れただけで正規表現の幅がぐっと広がった。

一方、肯定先読みというものもあり例は下記の通り。

$str = 'aaabbbcccddd';

$pt = '/^(?=.*abbbc).*$/';

$res = preg_match($pt, $str);

var_dump($res);

↓

int(1)

この場合、指定した文字列「abbbc」がターゲットの中に存在している場合、1を返すようになる。