Использование обратной ссылки в регулярном выражении

0

У меня есть функция php, которая возвращает сообщение Facebook как текст. Тем не менее, я хочу, чтобы все # -hashtags были доступны для просмотра и ссылались на http://www.facebook/hashtags/ {the -hhhtag}. Я попытался сделать это со следующим preg_replace, но, видимо, я делаю что-то неправильно:

$postMessage = preg_replace('/#[^(\s|\p{P})]*', '<a href="https://www.facebook.com/hashtag/$1" title="$1"></a>', $postMessage);

Это выводит ссылки, где ожидалось, поэтому регулярное выражение кажется правильным, но вывод выглядит следующим образом:

<a href="https://www.facebook.com/hashtag/" title=""></a>

Поэтому я уверен, что я делаю что-то неправильно с обратной ссылкой, но я не совсем уверен, что.

(Боковой вопрос, global параметр не нужен в preg_replace? Я привык использовать его в JS.)

Пример $postMessage:

Android Wear testen doen we met de Sony #Smartwatch3. Binnenkort volgt een uitgebreide review op de website ;-)

Выход должен быть:

Android Wear testen doen we met de Sony <a href="https://www.facebook.com/hashtag/smartwatch3" title="Smartwatch3">#Smartwatch3</a>. Binnenkort volgt een uitgebreide review op de website ;-)
  • 0
    используйте другой разделитель php '~(#[^\s]*\s)~ и вам не нужно добавлять модификатор g .
  • 0
    Он должен работать. Что такое содержание $postMessage ?
Показать ещё 1 комментарий
Теги:
preg-replace

2 ответа

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

Regex:

#([^\p{P}\s]*)

[^\p{P}\s]* соответствует любому символу, но не пунктуации или пробелы, ноль или более раз.

Заменяемая строка:

<a href="https://www.facebook.com/hashtag/$1" title="$1">#$1</a>

DEMO

PHP-код был бы,

$re = "/#([^\\p{P}\\s]*)/m";
$str = "Android Wear testen doen we met de Sony #Smartwatch3. Binnenkort volgt een uitgebreide review op de website ;-)\n\n";
$subst = "<a href=\"https://www.facebook.com/hashtag/$1\" title=\"$1\">#$1</a>";

$result = preg_replace($re, $subst, $str);
  • 0
    Почти. Я должен вычесть # из обратной ссылки. Т.е. фактический результат должен быть следующим: <a href="https://www.facebook.com/hashtag/{MATCH-without-#}" title="{MATCH-without-#}">{MATCH}</a>
  • 0
    смотри мое обновление ..
1
#([^\s\p{P}]*)\S+

Просто сгруппируйте его регулярное выражение. Он работает. Смотрите демоверсию.

https://regex101.com/r/vD5iH9/39

Ещё вопросы

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