在花括号内查找文本并替换包括花括号在内的文本

时间:2018-10-05 07:05:15

标签: 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);

和我的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同时替换文本和花括号

2 个答案:

答案 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 '';
      }
  });