Есть строка. Мне нужно по регулярному выражению обернуть все совпадения в тег span. Делаю так:
$str = 'Строка для замена';
$str = preg_replace("/(без|для|на|)/", "<span>${n}</span>", $str);
echo $str;
Получаю ошибку. Пишет, что есть неизвестная переменная n во второй строке. Как поправить, чтобы можно было находить любое количество совпадений в строке и обрамлять их тегом?
${n} -> $1
$str = preg_replace("/(без|для|на)/", "<span>$1</span>", $str);
Чтобы целое совпадение обернуть каким-нибудь тегом, можно воспользоваться обратной ссылкой на целое совпадение в шаблоне замены.
В 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)
Продвижение своими сайтами как стратегия роста и независимости