Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Выборка тега
Форумы портала PHP.SU » PHP » Регулярные выражения » Выборка тега

Страниц (1): [1]
 

1. voodoo_dn - 25 Апреля, 2014 - 17:27:18 - перейти к сообщению
Добрый день. Интересует регулярка, которая будет выбирать из текста теги, вида: #ТЕГ, #"что угодно" и #'что угодно'.
На данный момент она выглядит так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. /#([^\"|\'|\s][^\,|\.|\!|\?|\s]+)|#[\"]{1}([^"]+)[\"]{1}|#[\/\']{1}([^\']+)[\']{1}|#(\d+)/

Но туда цепляются якоря из ссылок, которые попадают в текст. Мне надо регулярку, которая будет искать теги вне ссылки.

Если есть идеи, пишите, буду благодарен.

p.s. текущая регулярка очень замудренная, можно сократить, делалось несколько месяцев назад.
2. duhon - 29 Апреля, 2014 - 14:28:35 - перейти к сообщению
честно, не прочитал вашу регулярку, просто за 3 минутки накидал вариант, что бы увидить в чем проблема. Дайте свой пример входящих данных.
PHP:
скопировать код в буфер обмена
  1. echo preg_replace('/\B#(?:([\'"]).*\1|\S+)/', '<$0>', 'текст url=http://test.ru/test.php#interest. Теперь пойдут теги #ТЕГ и #"что угодно" и #\'что угодно\'.');

результат
PHP:
скопировать код в буфер обмена
  1. текст url=http://test.ru/test.php#interest. Теперь пойдут теги <#ТЕГ> и <#"что угодно"> и <#'что угодно'>.


P.S. просмотрел вашу регулярку, не удержался и очистил ее от "шлака"
CODE (htmlphp):
скопировать код в буфер обмена
  1. '~#(?:([^"\'\s][^,.!?\s]+)|"([^"]+)"|\'([^\']+)\'|(\d+))~'

 

Powered by ExBB FM 1.0 RC1