Замена подстроки с помощью регулярного выражения

144
27 мая 2021, 09:50

Есть строка. Мне нужно по регулярному выражению обернуть все совпадения в тег span. Делаю так:

$str = 'Строка для замена';
$str = preg_replace("/(без|для|на|)/", "<span>${n}</span>", $str);
echo $str;

Получаю ошибку. Пишет, что есть неизвестная переменная n во второй строке. Как поправить, чтобы можно было находить любое количество совпадений в строке и обрамлять их тегом?

Answer 1

${n} -> $1

$str = preg_replace("/(без|для|на)/", "<span>$1</span>", $str);
Answer 2

Чтобы целое совпадение обернуть каким-нибудь тегом, можно воспользоваться обратной ссылкой на целое совпадение в шаблоне замены.

В PHP это $0:

$str = preg_replace("/без|для|на/u", '<span>$0</span>', $str);

Всё, что найдёт регулярное выражение, и будет подставлено в результат между <span> и </span>.

$0 можно также использовать в java (x.replaceAll("\\d+", "<span>$0</span>")), Notepad++, swift (x.replacingOccurrences(of: "\\d+", with: "<span>$0</span>", options: [.regularExpression]) и c++ (std::regex_replace(s, std::regex("\\d+"), "<span>$0</span>"); / std::regex_replace(s, std::regex("\\d+"), "<span>$&</span>")).

В Notepad++ и C++ std::regex можно использовать как $&, так и $0.

В других языках

$&: - c#: Regex.Replace(x, @"\d+", "<span>$&</span>") - javascript: x.replace(/\d+/g, '<span>$&</span>') - perl: $ч =~ s/\d+/<span>$&</span>/g \0: - ruby: x.gsub(/\d+/, '<span>\0</span>') - tcl: regsub -all {\d+} $x {<span>\0</span>} result - r (stringr): , str_replace(x, "\\d+", "<span>\\0</span>") \g<0>: - python: re.sub(r"\d+", r"<span>\g<0></span>", x) %0: - lua: string.gsub(x, "%d+", "<span>%0</span>") &: - sed: sed 's,[0-9][0-9]*,<span>&</span>,g' file Отсутствует (т.е. придётся заключить всё выражение в захватывающую подмаску и использовать \1 в шаблоне замены) в - r (в базовых функциях R, в которых используется библиотека TRE / PCRE)

READ ALSO
exec в php не выводит ответ

exec в php не выводит ответ

Что выводится в командной строке:

134
Выбрать четыре дня текущей недели, включая сегодняшний и три случайных

Выбрать четыре дня текущей недели, включая сегодняшний и три случайных

Нужно выбрать 4 дня недели, включая сегодняшнийЖелательно использовать инструменты, входящие в Laravel, так как проект создан с помощью этого...

97
пространства имен php 7.3

пространства имен php 7.3

У меня в пространстве имен Test, есть класс A

116