PHP のショートコードに一致するように作成した正規表現に問題があります。
これはパターンで、$shortcode
はショートコードの名前です:
\[$shortcode(.+?)?\](?:(.+?)?\[\/$shortcode\])?
さて、この正規表現は次の形式でほとんど問題なく動作します。
[shortcode]
[shortcode=value]
[shortcode key=value]
[shortcode=value]Text[/shortcode]
[shortcode key1=value1 key2=value2]Text[shortcode]
しかし、最も一般的な形式に問題があるようで、
[shortcode]Text[/shortcode]
これは、以下に一致するものとして返します。
Array
(
[0] => [shortcode]Text[/shortcode]
[1] => ]Text[/shortcode
)
ご覧のとおり、2 番目の一致 (最初の一致はオプションであるため、テキストである必要があります) には、開始タグの末尾と、最後のブラケットを除くすべての終了タグが含まれています。
編集:返された一致は、2 番目ではなく最初の captureであることがわかりました。Regexr の正規表現を参照してください。
これを手伝ってもらえますか?私は本当にこれに頭を悩ませています。