私は自分自身で1つの作業正規表現を生成することはできません。私が考えているごとに、たとえ単純なケースであっても、私はまだ失敗します。私は何十もの似たような質問を数多く研究し、すべてのテクニックを試しましたが、それでも動作しません。ここで正規表現の文字列を読み込む正規表現が機能しないのはなぜですか?
は、私は "パース" しようとしているフォーマットです:
{{Taxobox
任意の文字列がここにありませんが、決して二重の中括弧ができ
}}ここに来ますテキストの段落は、それは任意の文字列を含めることができますが、 は二重の等号(==)
==これはヘッダ
あるが含まれることはありません
私がしようとしているのは、Taxobox {{}}の後と==ヘッダの前にあるものをすべて抽出することです。これは私が持っているものです:
$pattern = "/\{\{Taxobox[^\}]*\}\}(.*?)==/";
if (preg_match($pattern, $pagecontent, $matches)) {
var_dump($matches);
}
この一致の結果は何もありません。私は最初の部分が、(。*?)がTaxoblockに首尾よくマッチするまで知っています。今度はそれ以降のすべてのものをマッチングするだけです。==に達するまでです。なぜこの最後の部分がうまくいかないのか分かりません。
これはうまくいきました。私の学習のために、私はまだこのパターンがなぜ働いているのか疑問に思いますか? – Ferdy
単に 's'修飾子のために、' .'でマッチした文字クラスに改行も考慮するようにエンジンに指示します。そして、あなたのバージョンがあまりにも機能しているなら、 '{{Taxobox}}'部分を少し修正しました。私の正規表現は、 '{{Taxobox'文字列の後に続く部分' \} \} 'が見つかるまで何かをマッチさせるように指示するだけです。 –