質問内容
PCRE(Perl互換正規表現)を検索パターンとして受け取る関数を呼び出すとき、
検索パターンを「"//"」とした場合、正規表現として何にマッチすると説明できるのでしょか?
質問の詳細
PHPマニュアルの「preg_split」の使用例に、文字列を文字要素に分割する例があります。
preg_split — 正規表現で文字列を分割する
このコードでは、検索パターンとして「"//"」を渡しています。
正規表現を記述する際("/pattern/")のpatternを空にすると正確には何にマッチしているのでしょうか。
検証コード1
php
1<?php 2$arr = preg_split("//", "abc", NULL, PREG_SPLIT_NO_EMPTY); 3print_r($arr);
出力結果1
Array ( [0] => a [1] => b [2] => c )
一見文字の間にマッチしているように見えます。
しかし、フラグとして「PREG_SPLIT_NO_EMPTY」を指定しない場合、次の結果になります。
検証コード2
php
1<?php 2$arr = preg_split("//", "abc", NULL); 3print_r($arr);
出力結果2
Array ( [0] => [1] => a [2] => b [3] => c [4] => )
前後に空要素があり、PREG_SPLIT_NO_EMPTYにより削除されていたようです。
ここで、疑問なのですが前後の要素は何によって区切られた結果なのでしょうか?
検証として同じ正規表現を使用できる「preg_replace」で対象となった区切りを
文字に置き換えてみました。
検証コード3
php
1<?php 2$str = preg_replace("//", "-", "abc"); 3print($str);
出力結果3
-a-b-c-
この結果から、preg_splitの処理として前後の空要素が追加されたのではなく、
文字の間以外に、文字列の前後にもマッチしています。
これはマッチ処理の実装の結果なのか、正規表現として処理結果なのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/18 14:29