regex — PHP preg_match_all: найти строку с & quot; @ word & quot; или & quot; # слово & quot; в этом

Позвольте мне прояснить логику, которую я хотел достичь.

  1. У меня много комментариев и тематических слов в БД
  2. Я хочу соответствовать теме слова в комментарии с помощью регулярного экспресса.
  3. Соответствующие слова будут запрошены в БД и получат их topicid и применят тему для комментариев для генерации облака тегов.

но как слова, начинающиеся с «@» а также «#msgstr «не получать работу в шаблоне preg_match_all, например.

$pattern = '/\b(\@abdulcollo|tuskys|\#teamBata|50\% off|baby|\@mystic_false)\b/i';

$string = 'Anga lonely everyday RT @Mystic_False: Heehe @AbdulCollo aneno ka idhi tuskys in lonely bana #TeamBata in Kakamega baby! @danaceda @kibalimoreithi @olivermathenge @batakenya @ Tuskys Mega Mall 50% off';

prag_match_all($pattern, $string, $matches);

var_dump ($ matched) возвращает под массив.

$matches = array('tuskys', 'baby', '50% off');

но я тоже хотел иметь ‘@Abdulcollo’, ‘#TeamBata’, ‘@Mystic_False’, Я избежал «@» и «#», но все равно они не совпадают …!

Любая помощь высоко ценится, я хочу логику для Pure PHP.

НОТА : Я создаю строчные буквы, например, строчные слова при создании шаблона для слова тега, а также нижнюю строку комментария, так что это не проблема.

1

Решение

Это из-за границы слова \b, Не существует границы слова между несловесным символом и несловесным символом. Так что измените свое регулярное выражение на,

(?:\b|\B)(@abdulcollo|tuskys|#teamBata|50% off|baby|@mystic_false)\b

DEMO

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]