WordPress ショートコードのような文字列があり、属性を抽出する必要があります。:
[prefix action="foo" class="bar"][/prefix]
この構造を正確に維持する必要があるため、引用符を削除して次のようにすることはできません。action=foo
今私はWordPressの正規表現パターンを使用しました:
// Grabs [prefix foo="bar"][/prefix] from the $content
$pattern = '/\[(\[?)(' . PREFIX . ')(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+)\[\/\2\])?)(\]?)/';
preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);
これは結果です:
Array
(
[0] => [prefix action="foo" class="bar"][/prefix]
[1] =>
[2] => prefix
[3] => action="foo" class="bar"
[4] =>
[5] =>
[6] =>
)
次に、正規表現の一致をループします
foreach( $matches as $block )
{
/*
* I'm not working on WordPress platform,
* But I used function shortcode_parse_atts
*/
$attr = shortcode_parse_atts( $block[3] );
結果:
Array
(
[action] => "foo"
[class] => "bar"
)
そして最後にextract($attr)
。しかし、ご覧のとおり$class
、$action
値は二重引用符で囲まれています。だから私はそれらの引用符に乗る必要があります。
要するに:
私$class = "bar"
が$class = bar
なぜstr_replace
orを使わないのかと思う場合に備えてpreg_replace
、私はやったのですが、どういうわけか引用符を削除しませんでした (理由はわかりません)