У меня есть текст с твиттер-стилем #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);