質問: 以下の文字列からA要素とC要素の内容を正規表現を使って抽出したいです。 C要素数は0~Nです。 ////////////////////////// xxx xxx xxx ・ ・ xxx ////////////////////////// 現在は 1. (a)でA要素の内容とB要素の内容を取得し、 2. 1で取得したB要素の内容を使って(b)で複数のC要素の内容を取得 と2回に分けて処理しています。 これを1回で取得する正規表現文はありますでしょうか。 (a) (.+?)\s(.*?) (b) (.+?)
回答: ### 1回の正規表現 二回の正規表現で必要十分に思えますが、一回の正規表現に拘る理由は何ですか。 ~~パフォーマンス的には二回の方が良さそうですが、バックトラック分は気になります。~~ **(2018/04/12 22:58追記)** PHPには `preg_match_all` がありましたね(この関数の処理速度には詳しくない為、上記一文は取り下げます)。 * PHP: preg_match_all - Manual ### XPath 正規表現でなければ、なりませんか。 PHPはDOMを使えるので、XPathを使えば、楽に制御できます。 * PHP: DOMDocument::loadXML - Manual * PHP: DOMXPath::evaluate - Manual Re: grarare さん