Найти текст внутри фигурных скобок и заменить текст, включая фигурные скобки - PullRequest
0 голосов
/ 05 октября 2018

Я хотел бы найти шаблон {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

Как я могузаменить текст и фигурные скобки одновременно, используя preg_replace_callback в php, используя регулярное выражение

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Если у вас есть такое сложное регулярное выражение, вы можете посмотреть на 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 '';
      }
  });
0 голосов
/ 05 октября 2018

Вам необходимо отредактировать шаблон следующим образом:

$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 .

...