我正在使用str_replace替换一个可以正常工作的简单短代码:
$content = "[old_shortcode]";
$old_shortcode = "[old_shortcode]";
$new_shortcode = "[new_shortcode]";
echo str_replace($old_shortcode, $new_shortcode, $content);
但是我还想在不影响任何文本内容的情况下替换简码内的属性,例如,更改此内容:
[old_shortcode old_option_1="Text Content" old_option_2="Text Content"]
对此:
[new_shortcode new_option_1="Text Content" new_option_2="Text Content"]
非常感谢有人可以提出建议。
为澄清起见,此问题不是关于解析简码(因为它已被标记为重复的),而是将一个简码替换为链接的重复问题无法回答的另一个简码。
编辑:
我自己弄清楚了,但是如果有人想提出更好的建议,这可能不是一个很愚蠢的解决方案?
$pattern1 = '#\[shortcode(.*)attribute1="([^"]*)"(.*)\]#i';
$replace1 = '[shortcode$1attribute1_new="$2"$3]';
$pattern2 = '#\[shortcode(.*)attribute2="([^"]*)"(.*)\]#i';
$replace2 = '[shortcode$1attribute2_new="$2"$3]';
$pattern3 = '#\[shortcode(.*)(.*?)\[/shortcode\]#i';
$replace3 = '[new_shortcode$1[/new_shortcode]';
$content = '[shortcode attribute2="yes" attribute1="whatever"]Test[/shortcode]';
echo preg_replace(array($pattern1,$pattern2,$pattern3), array($replace1,$replace2,$replace3), $content);
答案 0 :(得分:0)
使用preg_replace()
来代替,仅使用正则表达式选择想要的字符串部分。
$newContent = preg_replace("/[a-zA-Z]+(_[^\s]+)/", "new$1", $content);
在demo中查看结果