Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 替换特定标记内的字符串_Php_Regex - Fatal编程技术网

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}~”
不要使用带构造函数表示法的正则表达式分隔符。你的方法对我很有效。你能把它作为答案贴出来吗?另外,如果我想得到这个标签之间的字符串,你能告诉我需要做什么吗。我想在它们之间输入文本try
print\r($out[1])
echo preg_匹配(“/(?s){tag}(.*{\/tag}/”,$string,$output_数组)我尝试了这个,但结果是1。在演示中,您向我展示了它的工作原理:(请喜欢我的代码..或
preg_匹配(“/(?)s{tag}(.*){\/tag}/”,$string,$output_数组);echo$output_数组[1];
@Ruchi
preg_匹配
应该进行一次性全局匹配,您必须使用
preg_匹配
all
func。。