Простое регулярное выражение задачи, заменяющее любой «% function test%» на test

0

Я пытаюсь найти хорошее выражение для замены любой строки, начиная с:

"%function

и заканчивается:

%"

с помощью строки inbetween, например:

"% function test%" должен вернуться

test 

и "% function test%", "% function test%" должен возвращать:

test,test

Я попробовал это

preg_replace('/"%function (.*)?%"/', '$1',$string);

Сначала у меня была большая надежда, потому что мой первый пример отлично работает, но с множеством функций не так велик.

Для получения дополнительной информации вы можете увидеть код и попробовать здесь (своего рода phpfiddle): http://sandbox.onlinephpfunctions.com/code/00232644b801271e2ffb2ddf4cd450ddffcb50c2

Любая помощь будет принята с благодарностью, с наилучшими пожеланиями.

Теги:

3 ответа

2
Лучший ответ

Используя ? вне группы захвата, вы делаете это необязательным. Вместо того, что вы хотите, это не жадный * так что вы должны сделать. Другой выбор - сделать ([^%]+)

preg_replace('/"%function (.*?)%"/', '$1',$string);
  • 0
    здорово ! работает как положено, ты
  • 0
    @ Su4p рад, что помог :)
2

Вы можете использовать внешний вид

(?<="%function )[^%]+(?=%")

Демо-версия Regex

preg_match_all( "/(?<=\"%function )[^%]+(?=%\")/", "\"%function test%\"", $matches);

Будет производить

Array ( [0] => Array ( 
                       [0] => test 
                      ) 
      ) 
0
%\s*\S+\s+(\S+?)\s*%

Попробуйте это. Замените его на $1 Прочтите демоверсию.

https://regex101.com/r/wZ0iA3/8

$re = "/%\\s*\\S+\\s+(\\S+?)\\s*%/im";
$str = "%function test%\n%function test%,% function test%";
$subst = "$1";

$result = preg_replace($re, $subst, $str);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню