私は基本的な正規表現で大丈夫ですが、pos/neg先読み/後ろ見の周りで少し迷子になります。
私はこれからID#を取得しようとしています:
[キーワードstuff=otherstuff id = 123 morestuff = stuff]
前後に無制限の量の「もの」が存在する可能性があります。私は自分が試したことをデバッグするために正規表現コーチを使用してきましたが、もう前進していません...
これまでのところ私はこれを持っています:
\[keyword (?:id=([0-9]+))?[^\]]*\]
これはidの後の余分な属性を処理しますが、keywordとidの間のすべてを無視する方法がわかりません。行くことができないことはわかってい[^id]*
ますが、このようなネガティブな先読みを使用する必要(?!id)*
があると思いますが、幅がゼロであるため、そこから先に進むことはないと思います。これも機能しません:
\[keyword[A-z0-9 =]*(?!id)(?:id=([0-9]+))?[^\]]*\]
私は例を探し回っていますが、見つかりませんでした。あるいは、私は持っているかもしれませんが、彼らは私の頭をはるかに超えて行きました。私は彼らが何であるかさえ知りませんでした。
ヘルプ!ありがとう。
編集:[keyword stuff = otherstuff]にも一致する必要があります。ここで、id =はまったく存在しないため、id#グループに1または0を指定する必要があります。他にも、一致させたくない[otherkeywords id=32]があります。ドキュメントは、preg_match_allを使用して、ドキュメント全体で複数の[keyword id=3]と一致する必要があります。