Хэштегтерге мәтінді бөліп алып, php арқылы сілтемелермен ауыстырыңыз

I have some text with twitter style #hashtags. How would I write a function to parse a body of text that might contain an unlimited number of #hashtags, take the text of the hashtag and replace them all with an [hashtag text]

Мен мұны қалай жасау керектігі туралы көп ойладым, бірақ бұл функцияларды регреспен жазғанда өте жаманмын.

Мысал мәтіні:

Егер сіз өзіңізді бақылап отырсаңыз, онда сіз өзіңізді қолдана аласыз. Vivamus #tristique non elit eu iaculis. Vivamus ultricies nisi. Vivamus-тегі бұлшық еттеріне арналған. Donec nibh mauris,   Пульвинар және #commodo a, porta et tellus. Duis eget ante gravida,   лақтырылған, лақтырылмаған. Mauris euismod commodo mi   фрингилла. Sed felis magna, rhoncus vitae mattis varius, sagittis a   эроз. Қандай да бір нәрсе. #Mauris sed mauris ante. Тоқтату   күші. #Pretium #augue дегенді қосыңыз, алға немесе артқа. Бүтін сандар   scelerisque нәтижесі.

8
мәтіннің үлгісін және талдаудың нәтижесін талдаудан кейін келтіріңіз
қосылды автор Brian, көзі

6 жауаптар

Мұны пайдаланып көріңіз:

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

Мұнда ол жұмыс істейді: https://3v4l.org/WXqTr (іске қосуды басыңыз).

Regex reference: Space or beginning of string, Non capturing group

Түпнұсқа дерек көзі: Twitter-ді RegExp арқылы талдау

20
қосылды
Бұл хэштегтен бұрынғы бос орын сипатын талап етеді, сондықтан #hashtag blah blah blah ұсталмайды.
қосылды автор jraede, көзі
+1 - \ w таңбасының сөзін ұмытып қаламын, бұл [^ \ s]
қосылды автор jraede, көзі
Бұл оларға хэштегтері бар сілтемелермен жұмыс істемейді. Ол бұзылады.
қосылды автор Mike Barwick, көзі
@ jraede - рахмет, енді ол жаңартылды.
қосылды автор Joe, көзі
@MikeBarwick - түпнұсқа мәселе бұл туралы айтқан жоқ, бірақ бұл жарамды мәселе, мен мәселені шешу үшін жаңарттық.
қосылды автор Joe, көзі

Бұл UTF-8 кодтау мәтіндерімен жұмыс істейді және мазмұндағы тегтер алдында # (хэш) көрсетіледі

preg_replace('/(\#)([^\s]+)/', ' #$2 ', $content);
3
қосылды
Бұл грек кейіпкерлерімен жұмыс істейтінін растаймын (UTF-8), онда жоғарыда көрсетілген шешімдер тек ағылшын чаттарымен жұмыс істейді! рахмет
қосылды автор Theodoros80, көзі

Мынаны көріңіз:

preg_replace('/(\#)([^\s]+)/', '$2', $your_content_here);

Бұл бұны бұрады: Бұл #hashtag

бұл: Бұл hashtag ,

Assuming that you have $your_content_here = 'This is a #hashtag';

1
қосылды
Awww ty, бұл керемет :)
қосылды автор Amy Neville, көзі
@ Джо регистрі шын мәнінде біршама жақсы - хэстегтің үтір, кезең немесе басқа символы болуы мүмкін. Әрине, «hashtag» дегенді қалай анықтау керектігіне байланысты.
қосылды автор jraede, көзі

Мен Джо мен Джейранның шешімін біріктірдім.

UTF-8 қауіпсіз және дұрыс hashtag пішімі (үтір және т.б.):

preg_replace('~(\#)([^\s!,. /()"\'?]+)~', '#$2', $text);
1
қосылды
Сұрақты осы жерде дұрыс емес деп жойды. Мұны еске салғаныңыз үшін рахмет.
қосылды автор Fabian Schöner, көзі
Сіз сұрақ қоясыз ба? егер солай болса, бұл түсініктеме, егер сізде мәселе бар болса, сіз жаңа сұрақты бастайсыз, бірақ егер бұл сұрақ әлі жауап бермесе ғана ... Біраз зерттеулер жасаңыз, сосын сұраңыз :)
қосылды автор Ares Draguna, көзі
проблема жоқ... :)
қосылды автор Ares Draguna, көзі

The correct answer is this. For more reasons than one. But most importantly, you need to factor in if your string has URLs, all other answers will break otherwise. See example below:

$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#$2', $text);

echo $text;
0
қосылды

Ол мәтіндегі әрбір тегтің сілтемелерін алып тастайды және оларды тегтер арасында бос орындар болмайды.

$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+)/', ' $1', $text);
echo $text;
0
қосылды