テキスト内でショートコード文字列を見つけることができるルビー互換の正規表現を探しています。
正規表現は、次の文字列を識別できます。
[shortcode][shortcode=value][shortcode key=value][shortcode=value]Text[/shortcode][shortcode key1=value1 key2=value2]Text[/shortcode][shortcode]Text[/shortcode]
テキスト内でショートコード文字列を見つけることができるルビー互換の正規表現を探しています。
正規表現は、次の文字列を識別できます。
[shortcode][shortcode=value][shortcode key=value][shortcode=value]Text[/shortcode][shortcode key1=value1 key2=value2]Text[/shortcode][shortcode]Text[/shortcode]例で提供されているソリューションをトリミングします。
\[shortcode(.*?)\]((.*?)\[\/shortcode\])?
$1は、最初shortcodeと最も近いの間のすべてを取得し]、と$3の間のテキストに[shortcode...]なり[/shortcode]ます。
正規表現から任意の長さと順序の解析された属性のリストを取得する限り、いいえ、それはできません。$1次のような特定の属性を検索できる場合があります。
key=(.*?)\b
ただし、完全なリストを取得するには、他のメソッド(おそらく、Shortcode APIが役立つ)を使用してトークン化/解析する必要があります$1。
これはどうですか ?
/\[(?<shortcode>([^\]]+))(.+?)?\](?:(.+?)?\[\/\k<shortcode>\])?/.match('[blah]whatever[/blah]')
# => #<MatchData "[blah]whatever[/blah]" shortcode:"blah">
(あなたが与えたリンクの正規表現内と2番目のものに置き換えられまし$shortcodeた)(?<shortcode>([^\]]+))\k<shortcode>