08/01/01 01:54:00 mia1J22w
PHP5の正規表現について質問です。
PHP5.2.5 (cli) を使用しています。
1. PHPスクリプトのエンコードはUTF-8
mb_regex_encoding('UTF-8');
mb_internal_encoding('UTF-8');
2. URLリンク(2ch.net) を fsock で取得(これは問題なし)
3. mb_convert_encoding で UTF-8 に変換(これも問題なし)
4. その文字列を正規表現で処理…(ここで問題発生)
//if (mb_eregi('<div[^>]*>(?:(?!</div>)(?:.|\s))*?利用者各位', $body, $matches)) // 動かない(エラーも吐かずに停止状態になる)
if (mb_eregi('<div[^>]*>(?:(?!</div>)(?:.|\s))*?利用者各位', $body, $matches)) // 動く
print_r($matches);
else echo 'NO MATCH';
正規表現的に問題は無いと思うのですが…
「(?!</div>)」を消したり、「(?:.|\s)」を「(?:.|s)」や「.」にすると動きます。
「.」が改行にマッチするので、「.」に置換すればいいのですが、何故この様な事になるのか解りません。
何か無限ループ的なことになっているような気も…