Php 查找大括号内的文本并替换包含大括号的文本
我想找到一个模式Php 查找大括号内的文本并替换包含大括号的文本,php,regex,preg-replace-callback,Php,Regex,Preg Replace Callback,我想找到一个模式{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); 预期产出 您将有一个这样格式的记事本来执行PHP 如何在使用regex的php中使用p
{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);
预期产出
您将有一个这样格式的记事本来执行PHP
如何在使用regex的php中使用
preg\u replace\u callback
同时替换文本和大括号?您需要如下编辑模式:
$data = preg_replace_callback('/{{([^{}]*)}}/', array($this, 'special_functions'), $data);
{([^{}]*)}
模式将匹配:
-{{
子字符串{{{
-第1组:除([^{}]*)
和{
}
-a}
文本}
特殊功能
功能内,将开关($occurances[0])
替换为开关($occurances[1])
。$occurrences[1]
是用([^{}]*)
模式捕获的文本部分。由于整个匹配是{…}
,捕获的是..
,因此..
用于检查开关块中可能出现的情况,大括号将在使用后被删除(=添加到由于preg\u replace\u回调
函数而被替换的匹配值中)
请参阅。如果您有如此复杂的regexp,您可能需要查看:
在问题中添加
特殊函数
代码,并提供预期结果。预期结果是什么?@revo更新了我的答案question@WiktorStribiżew我已将该功能添加到我的问题中。请参见下面的答案,它一定对您有用。如果没有,请提供一个更新的PHP提琴来显示问题。这是有效的。我有一个疑问$occurances[0]包含带大括号的文本,$occurances[1]包含不带大括号的文本。所以从逻辑上讲,$occurances[0]应该同时替换文本和大括号?@Shadow$occurances[0]
不会替换任何内容。这是与preg\u replace\u callback
函数匹配的文本,因此它是将被替换的文本。我已向上投票。同样,索引[1]中的内容也将被替换。是吗?@Shadow是的,但是当{{…}
中的文本包含{
或}
时,[^{}]*
阻止任何匹配。如果你需要它们,用*?
@Shadow替换[^{}]*
,这没那么重要,从模式中删除一个{
和}
,'/{([^{}]*])}/'
,当然,没有火箭科学:)
$data = preg_replace_callback('/{{([^{}]*)}}/', array($this, 'special_functions'), $data);
$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 '';
}
});