いつも忘れるので。。。
まづ、
正規表現でいくつかのパターンがあるときに括弧()を使う
$pattern = '/((s|b)ox)/';
$result = preg_match($pattern, $string, $matches);
var_dump($result);
var_dump($matches);
これをパターン内で参照したい時は \nで表す
$pattern = '/(((s|b)ox), (black|white)\2)/';
-「n」は括弧の順番番号 外側から&左から数える ()=1 ()=2 ()=3 ()=4
$pattern = '/(((s|b)ox), (black|white)\2)/';
$result = preg_match($pattern, $string, $matches);
var_dump($result);
var_dump($matches);
?>
==========結果
int(1)
array(5) {
[0]=> string(13) "
sox, blacksox"
[1]=> string(13) "
sox, blacksox"
[3]=> string(1) "s"
[4]=> string(5) "black"
}
(?imsx-imsx:pattern) (?imsx-imsx)で
正規表現の
オプション変更が出来る
$string = "
red Sox, blackSox";
//大文字を混ぜてみる
$pattern = '/(((s|b)ox), (black|white)\2)/';
$result = preg_match($pattern, $string, $matches);
var_dump($result);
var_dump($matches);
?>
==========結果
int(0)
array(0) {
}
$pattern = '/(((?i)(s|b)ox), (black|white)\2)/';
//オプション変更 i=大小文字無視
$result = preg_match($pattern, $string, $matches);
var_dump($result);
var_dump($matches);
?>
==========結果
int(1)
array(5) {
[0]=> string(13) "
Sox, blackSox"
[1]=> string(13) "
Sox, blackSox"
[3]=> string(1) "S"
[4]=> string(5) "black"
}
$pattern = '/(((?i:s|b)ox), (black|white)\2)/';
//オプション変更
$result = preg_match($pattern, $string, $matches);
var_dump($result);
var_dump($matches);
?>
==========結果
int(1)
array(4) {
[0]=> string(13) "
Sox, blackSox"
[1]=> string(13) "
Sox, blackSox"
[3]=> string(5) "black"
}
※(?imsx-imsx:pattern)で記述すると
後方参照のキャプチャにカウントされなくなる!
※値を
キャプチャする必要はないが、グループ分けのために サブパターンを複数用いたい時に便利
★おまけ★
バックスラッシュの後に 数字が続くものはすべて後方参照番号の可能性があるものとして解釈されるので、後に数字が続く場合、後方参照を終了するためになんらかの区切り文字を 置く必要があるる
$pattern = '/(((?i)(s|b)ox), (black|white)\2(?#)999)/';//コメントを区切りにする
$result = preg_match($pattern, $string, $matches);
var_dump($result);
var_dump($matches);
?>
参照)