Intereting Posts
Strtotime () не работает с форматом dd / mm / YYYY Как создать подкатегории подкатегорий Расширение PHP PDO не работает в IIS Написание программы для очистки форумов вызывать скрипт php для каждой строки в моей базе данных mysql Миграции доктрины: в пространстве имен "" отсутствуют команды Преобразование и сжатие на стороне сервера Задержка PHP с использованием ob_flush с загружаемым сообщением PHP, отображающий китайские символы: SET NAMES 'utf8' не работает Сообщите Apache, чтобы использовать определенную версию PHP, установленную с использованием phpbrew Использование exec () в PHP: Передача аргументов PHP xpath содержит класс и не содержит класс Отправка данных объекта из AJAX в PHP Преобразование числа с запятой в виде десятичной точки для плавания Как предоставить внешний параметр учетной записи при создании управляемой учетной записи в полосе с помощью php?

Разбирайте текст для хэштегов и замените ссылки на php

У меня есть текст с твиттер-стилем #hashtags. Как написать функцию для синтаксического анализа текста, который может содержать неограниченное число #hashtags, взять текст хэштега и заменить их на <a href="tag/[hashtag text]">[hashtag text]</a>

Я много думал о том, как это сделать, но мне очень плохо писать такие функции с регулярным выражением.

Пример текста:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus #tristique non elit eu iaculis. Vivamus eget ultricies nisi. Vivamus hendrerit в mauris condimentum scelerisque. Donec nibh mauris, pulvinar et #commodo a, porta et tellus. Duis eget ante gravida, convallis augue id, blandit lectus. Mauris euismod commodo mi ut fringilla. Sed felis magna, rhoncus vitae mattis varius, sagittis a eros. Donec eget porta ipsum. #Mauris sed mauris ante. Suspendisse potenti. Donec a #pretium #augue, eget hendrerit orci. Целочисленный cursus scelerisque.

Попробуйте использовать это:

 $text = "Vivamus #tristique non elit eu iaculis."; $text = preg_replace('/(?:^|\s)#(\w+)/', ' <a href="tag/$1">$1</a>', $text); // $text now: Vivamus <a href="tag/tristique">tristique</a> non elit eu iaculis; 

Здесь он работает: https://3v4l.org/WXqTr (нажмите пробег).

Ссылка на Regex: пробел или начало строки , группа без захвата

Исходный источник: анализ Twitter с помощью RegExp

Это будет работать с текстами кодировки UTF-8 и покажет # (хеш) перед тегами в содержимом

 preg_replace('/(\#)([^\s]+)/', ' <a href="tag/$2">#$2</a> ', $content); 

Попробуй это:

 preg_replace('/(\#)([^\s]+)/', '<a href="tag/$2">$2</a>', $your_content_here); 

Это изменит это: This is a #hashtag

в это: This is a <a href="tag/hashtag">hashtag</a> ,

Предполагая, что у вас есть $your_content_here = 'This is a #hashtag';

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

 $text = "#test Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus #tristique non elit eu iaculis. Vivamus eget ultricies nisi. Vivamus hendrerit at mauris condimentum scelerisque. Donec nibh mauris, pulvinar et #commodo a, porta et tellus. Duis eget ante gravida, convallis augue id, blandits.Repost#high#fashion#photography#Ishan#portart#photo#Shoot#EishaChopra#luxe#twisty#creative#destination#style#Actor#model#beauty#gorgeous#makeup#and#hair#kamaldeep#fashionista#trending "; $text = preg_replace('/#(\w+)/', ' <a href="tag/$1">$1</a>', $text); echo $text; 

Правильный ответ таков. По нескольким причинам. Но самое главное, вам нужно учитывать, есть ли в вашей строке URL-адреса, все остальные ответы будут нарушаться иначе. См. Пример ниже:

 $text = "#test Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus #tristique non elit eu iaculis. Vivamus eget ultricies nisi. Vivamus hendrerit at mauris condimentum scelerisque. Donec nibh mauris, pulvinar et #commodo a, porta et tellus. Duis eget ante gravida, convallis augue id, blandit lectus. Mauris euismod commodo mi ut fringilla. Sed felis magna, rhoncus vitae mattis varius, sagittis a eros. Donec eget porta ipsum. #Mauris sed mauris ante. Suspendisse potenti. Donec a #pretium #augue, eget hendrerit orci. Integer cursus scelerisque consequat. http://www.example.com/#wdwd/dwdqwdqwdqw#dwqdqwdq"; $text = preg_replace('/(^|[\n\s])#([^\s"\t\n\r<:]*)/is', '$1<a href="http://twitter.com/search?q=%23$2">#$2</a>', $text); echo $text; 

Я объединил решение Джо и jraede.

UTF-8 безопасный и правильный формат hashtag (без запятой и т. Д.):

 preg_replace('~(\#)([^\s!,. /()"\'?]+)~', '<a href="tag/$2">#$2</a>', $text);