一部のプログラマーは、「...正規表現を使用して、実際には正規表現で解析してはならないものを解析するのにうんざりしている」と言っています (この人気のある @nickf コメントを参照してください)。私のような他の人は、PHP(および正規表現)でより多くのプログラミングを行い、別のフレームワーク( Lex/Yaccなど)を避けることを好みます...しかし、「それほど」ではなく、それが最初の質問です:
(複雑な) PHP パーサーの作成を避けなければならない場合は、実際の「パーサー ジェネレーターエンジン」に移行しますか?
最初の質問を完了する 2 番目の質問は、「複雑なものを解析するための最適な PHP ツールキットは何ですか?」です。2013 年現在、標準の相互運用可能なパーサー コンテンツ、XML (またはSimpleXML 配列など)、およびDOM API、 XPath、XSLTなどの「標準パーサー」があります。
私がスケッチしたように、おそらく「最善の解決策」はありませんが、時には解決策を選択し、次に別の解決策を選択するための優れた方法のレシピがあります。
要約: 1) 「パーサー ジェネレーターを使用するために、純粋な PHP または PHP+RegEx をいつ終了する必要がありますか?」; 2) 「PHP に最適なパーサー ジェネレーター、または最適なものを選択するためのレシピ/コンテキスト/条件は?」
(修正版に追記)
読者は一般的な議論を歓迎すると思いますが、ガイドラインを示すために、ここにいくつかの範囲を示します。
(@HugoDelsingに答える)一般的に、私は「それがどのように機能するかは気にしないが、迅速な結果を得たい」. 「すべてを完全に制御したい」場合、最適化が必要な場合があります。
(@bizzehdee に答える) 近年、私はさまざまな種類のテキスト文字列を解析しています。 Lex URN ; References/Bibliography の raw テキストと、Vancouver Styleなどの別のスタイリング テキスト。CSS 文字列; 日付; 電子メールのテキスト; 単位と方程式 (認識、正規化、最終的に変換するため)。別の時期には、単純なコマンド ライン ツールを開発しました。
好奇心(この質問を投稿する私の動機でした): 「Lex/Yacc アプローチの PHP 代替手段」の使用に関する私の答えは、毎月変動しており、正と負の「有用な投票」があります...おそらく、それはあることを示しているだけです「憎しみと愛」の振る舞いですが、一方で、良い質問になることもあります!