替换特定标记内的字符串

时间:2016-03-30 12:34:34

标签: php regex

我有一个描述字段,用户输入{tag}This has to be replaced{/tag} 我想用另一个替换文本。为此,我使用以下代码:

<?php
    $find = "/[^{tag}](.*)[^{\/tag}]/";
    $string = '{tag}This has to be replaced {/tag}';
    echo preg_replace($find, 'new text',$string);
?>

但我没有得到理想的结果。此外,在输出中我只想要:new text。我不想这样:{tag}New text{/tag}

除此之外,我如何才能获得这些标签之间的文字?

请指导我这个

1 个答案:

答案 0 :(得分:2)

使用非贪婪的正则表达式..

$find = '~{tag}.*?{/tag}~';
echo preg_replace($find, 'new text',$string);

如果tag /tag之间的文字包含换行符,则必须使用DOTALL修饰符。

$find = '~(?s){tag}.*?{/tag}~';

要在这些标记之间获取文本,请使用捕获组/.

$find = '~{tag}(.*?){/tag}~';
$out = preg_match($find, $str);
echo $out[1];