Чувствую себя застрявшим. Не могу найти ответ на 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);
@MrK Пожалуйста, завершите свой вопрос, добавив строки ввода и желаемую строку вывода. Даже если вы получили ответ, который помогает вам, предложение полного вопроса означает, что вы можете получить более качественный ответ, И это означает, что будущие исследователи лучше поймут вопрос и предоставленные ответы.






Вы можете попробовать вот так? после помещения этой переменной в фигурную скобку {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, они отображаются нормально.
пожалуйста, поместите свой полный код со всеми 3 переменными. Тогда я отредактирую свой ответ
Ваш второй пример работает. Так что я просто зря поставил двойные кавычки. Спасибо.
В первом примере все рассматривается как строка, двойные кавычки могут заменить переменную ее значением.
Вы заключаете переменные в двойные кавычки, когда в этом нет необходимости. Убрал это.
Пытаться:
$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);
Спасибо. Теперь работает. Я поставил двойные кавычки, которых не должно было быть.
Удалите кавычки из значения параметра внутри 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.
поместите свой полный код со значением
$cat,$subcatи$text