我想找到一种模式{text}
并替换包括花括号在内的文本。
$data = 'you will have a {text and text} in such a format to do {code and code}';
$data= preg_replace_callback('/(?<={{)[^}]*(?=}})/', array($this, 'special_functions'),$data);
和我的special function
包含用于替换花括号的回调代码,并完全有条件地替换文本。
public function special_functions($occurances){
$replace_html = '';
if($occurances){
switch ($occurances[0]) {
case 'text and text':
$replace_html = 'NOTEPAD';
break;
case 'code and code':
$replace_html = 'PHP';
break;
default:
$replace_html ='';
break;
}
}
return $replace_html;
}
预期产量
您将使用这种格式的NOTEPAD做PHP
如何使用正则表达式在php中使用preg_replace_callback
同时替换文本和花括号
答案 0 :(得分:1)
您需要像这样编辑图案:
$data = preg_replace_callback('/{{([^{}]*)}}/', array($this, 'special_functions'), $data);
{{([^{}]*)}}
模式将匹配:
{{
-{{
子字符串([^{}]*)
-第1组:除{
和}
以外的任何0+个字符}}
-}}
文字然后在special_functions
函数内部,将switch ($occurances[0])
替换为switch ($occurances[1])
。 $occurrances[1]
是用([^{}]*)
模式捕获的文本部分。由于整个匹配项为{{...}}
,捕获的内容为...
,因此...
用于检查切换块中的可能情况,由于括号是,因此括号将被删除。已消耗(=添加到由于preg_replace_callback
函数而被替换的匹配值中。)
请参见PHP demo。
答案 1 :(得分:0)
如果您有如此复杂的正则表达式,则可能需要查看T-Regx:
$data = 'you will have a {text and text} in such a format to do {code and code}';
pattern('{{([^{}]*)}}')
->replace($data)
->first()
->callback(function (Match $match) {
switch ($match->group(1)) {
case 'text and text':
return 'NOTEPAD';
case 'code and code':
return 'PHP';
default:
return '';
}
});