• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP5の正規表現でうまくマッチできない)

PHP5正規表現でマッチングできない問題についての解決方法

このQ&Aのポイント
  • PHP5の正規表現を使用して文字列中の独自タグをパースする際に問題が発生しています。
  • 期待した結果としては、<tag>タグの間の文字列を正しくマッチングさせることですが、実際には全てのタグが一つのマッチとして扱われます。
  • この問題を解決するために、正規表現パターンを修正する必要があります。具体的な方法としては、マッチしたタグの末尾に ? を追加することで、最短マッチングを行うことができます。

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

  • ベストアンサー
回答No.1
jontoo
質問者

お礼

所要の振る舞いにすることができました。 返信ありがとうございました。

その他の回答 (1)

noname#244856
noname#244856
回答No.2

最短マッチを使ってもいいですが、最速の正規表現を書くならば独占的最長マッチを用いて @<tag>[^<]*+</tag>@ とする方がオススメです。また、おそらく >> 実際は、 >> $result[0]:<tag>こんにちは</tag><tag>こんばんは</tag> >> となりました。 において $result[0] → $result[0][0] の誤りですよね。欲しいのはInnerHTMLだと思うので @<tag>([^<]*+)</tag>@ として、 $result[0][0] … OuterHTML $result[1][0] … InnerHTML にセットされるようにしてみましょう。なお、配列生成方式には - PREG_PATTERN_ORDER(デフォルト) - PREG_SET_ORDER の2種類がありますが、 「OuterHTMLもInnerHTMLも両方扱いたい」 という場合は PREG_SET_ORDER に変更したほうが使い勝手が向上するでしょう。この場合では $result[0][0] … OuterHTML $result[0][1] … InnerHTML となります。逆に 「InnerHTMLしか使わない」 という場合はデフォルトでいいと思います。

jontoo
質問者

お礼

最短マッチを使うことにしました。 今後独占的最長マッチ使う場合もありえる為詳しく調べてみます。 返信ありがとうございました。

関連するQ&A