PHP替换特定文本内的文本

时间:2018-10-02 07:48:20

标签: php string replace str-replace

我正在使用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);

1 个答案:

答案 0 :(得分:0)

使用preg_replace()来代替,仅使用正则表达式选择想要的字符串部分。

$newContent = preg_replace("/[a-zA-Z]+(_[^\s]+)/", "new$1", $content);

demo中查看结果