• ベストアンサー

正規表現 preg_match_all 

$c = preg_match_all('@href="/Top/World/Japanese/(?P<query>.*?)">(?:<b>|)(?P<cate>.*?)(?:</b>|)</a>@s', $buf,$match,PREG_SET_ORDER); print_r($match); の(?:<b>|)と(?:</b>|)の部分がまちがっているので、<b></b>タグがあってもなくてもいい場合にマッチさせることができないと思っています。 どうか教えてくださいませ。 ちなみにPHPの5.2.2です。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

どういうパターンのときに期待通りの動作をしていないのか補足してもらえますか? $target = array( '<a href="/Top/World/Japanese/hogehoge/fugafuga">hello world</a>"', '<a href="/Top/World/Japanese/hogehoge/fugafuga"><b>hello world</b></a>"'); foreach ($target as $v) { $match = array(); preg_match_all('@href="/Top/World/Japanese/(?P<query>.*?)">(?:<b>)?(?P<cate>.*?)(?:</b>)?</a>@s', $v, $match, PREG_SET_ORDER); print_r($match); } Array ( [0] => Array ( [0] => href="/Top/World/Japanese/hogehoge/fugafuga">hello world</a> [query] => hogehoge/fugafuga [1] => hogehoge/fugafuga [cate] => hello world [2] => hello world ) ) Array ( [0] => Array ( [0] => href="/Top/World/Japanese/hogehoge/fugafuga"><b>hello world</ b></a> [query] => hogehoge/fugafuga [1] => hogehoge/fugafuga [cate] => hello world [2] => hello world ) ) <b> と </b> のところはちょっと変えましたが変更前でも マッチ結果は変わりありません。 <b> があって </b> がないような場合でもマッチに成功してしまう という問題はありますが、そのことを尋ねているのではないのですよね?

brosis
質問者

お礼

sakusaker7の仰るとおりです。自分のスペルミスでした。 また、よろしくお願いします。

関連するQ&A