Php 替换特定标记内的字符串
我有一个描述字段,用户输入Php 替换特定标记内的字符串,php,regex,Php,Regex,我有一个描述字段,用户输入{tag}这必须被替换{/tag} 我想用另一个替换文本。为此,我使用以下代码: <?php $find = "/[^{tag}](.*)[^{\/tag}]/"; $string = '{tag}This has to be replaced {/tag}'; echo preg_replace($find, 'new text',$string); ?> 但我没有得到想要的结果。另外,在输出中,我只需要:新文本。我不想这样:
{tag}这必须被替换{/tag}
我想用另一个替换文本。为此,我使用以下代码:
<?php
$find = "/[^{tag}](.*)[^{\/tag}]/";
$string = '{tag}This has to be replaced {/tag}';
echo preg_replace($find, 'new text',$string);
?>
但我没有得到想要的结果。另外,在输出中,我只需要:新文本
。我不想这样:{tag}新文本{/tag}
除此之外,如何获取这些标记之间的文本
请指导我如何使用非贪婪正则表达式
$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];
请尝试
“~{tag}.*.{tag}~”
不要使用带构造函数表示法的正则表达式分隔符。你的方法对我很有效。你能把它作为答案贴出来吗?另外,如果我想得到这个标签之间的字符串,你能告诉我需要做什么吗。我想在它们之间输入文本tryprint\r($out[1])代码>echo preg_匹配(“/(?s){tag}(.*{\/tag}/”,$string,$output_数组)代码>我尝试了这个,但结果是1。在演示中,您向我展示了它的工作原理:(请喜欢我的代码..或preg_匹配(“/(?)s{tag}(.*){\/tag}/”,$string,$output_数组);echo$output_数组[1];
@Ruchipreg_匹配
应该进行一次性全局匹配,您必须使用preg_匹配
all
func。。