Как выполнить эхо в preg_replace?

Чувствую себя застрявшим. Не могу найти ответ на stackoverflow. Мне нужно вывести $ subcat и $ cat внутри preg_replace. Это не работает. Есть ли способ эхо внутри preg_replace?

$text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', '<a href = "https://somesite.com/search?cityid=0&lang=en&search=$1&subcatid = "'. $subcat .'"&view=ads&catid = "'. $cat .'"">#$1</a>', $text);

поместите свой полный код со значением $cat, $subcat и $text

Always Sunny 25.03.2018 04:45

@MrK Пожалуйста, завершите свой вопрос, добавив строки ввода и желаемую строку вывода. Даже если вы получили ответ, который помогает вам, предложение полного вопроса означает, что вы можете получить более качественный ответ, И это означает, что будущие исследователи лучше поймут вопрос и предоставленные ответы.

mickmackusa 25.03.2018 05:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
284
4

Ответы 4

Вы можете попробовать вот так? после помещения этой переменной в фигурную скобку {var}

$text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', '<a href = "https://somesite.com/search?cityid=0&lang=en&search=$1&subcatid = {$subcat}&view=ads&catid = {$cat}">#$1</a>', $text);

ИЛИ ЖЕ

$text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', '<a href = "https://somesite.com/search?cityid=0&lang=en&search=$1&subcatid='.$subcat.'&view=ads&catid='.$cat.'">#$1</a>', $text);

Показывает их как {$ subcat} и {$ cat}. Когда я повторяю их за пределами preg_replace, они отображаются нормально.

MrK 25.03.2018 04:46

пожалуйста, поместите свой полный код со всеми 3 переменными. Тогда я отредактирую свой ответ

Always Sunny 25.03.2018 04:49

Ваш второй пример работает. Так что я просто зря поставил двойные кавычки. Спасибо.

MrK 25.03.2018 04:56

В первом примере все рассматривается как строка, двойные кавычки могут заменить переменную ее значением.

Niklesh Raut 25.03.2018 05:00

Вы заключаете переменные в двойные кавычки, когда в этом нет необходимости. Убрал это.

Пытаться:

$text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', '<a href = "https://somesite.com/search?cityid=0&lang=en&search=$1&subcatid='. $subcat .'&view=ads&catid='. $cat .'">#$1</a>', $text);

Спасибо. Теперь работает. Я поставил двойные кавычки, которых не должно было быть.

MrK 25.03.2018 04:56

Удалите кавычки из значения параметра внутри href, используйте двойные кавычки " для замены переменной ее значением, также экранируйте $1, чтобы сделать ее текстовой

   $text = preg_replace('/(?<!\S)#([0-9a-zA-Z]+)/', "<a href='https://somesite.com/search?cityid=0&lang=en&search=\$1&subcatid=$subcat&view=ads&catid=$cat'>#\$1</a>", $text);

Ваш паттерн можно немного сжать с помощью модификатора паттерна i и сделать его более эффективным, опуская группу захвата и используя \K для перезапуска полного совпадения строк. Кроме того, ваша замещающая строка может быть записана без использования конкатенации точек с использованием \\0 или \$0 для представления полного совпадения строки (которое в противном случае было бы записано (без экранирования) как $0 или \0).

Код: (Демо)

$subcat = 1;
$cat = 2;
$text = 'This is a non-qualifying#HashTag and this has white space before it #Test9 and some more text.';
$text = preg_replace('/(?<!\S)#\K[\da-z]+/i', "<a href=\"https://somesite.com/search?cityid=0&lang=en&search=\\0&subcatid=$subcat&view=ads&catid=$cat\">#\\0</a>", $text);
echo $text;

Выход:

This is a non-qualifying#HashTag and this has white space before it #<a href = "https://somesite.com/search?cityid=0&lang=en&search=Test9&subcatid=1&view=ads&catid=2">#Test9</a> and some more text.

Другие вопросы по теме