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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Хэш тег

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
tempo
Отправлено: 27 Марта, 2014 - 18:35:08
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




Есть регулярное выражение для отбора хэш тегов



все работает хорошо, но вот ловится и то что начинается не только на решетку(#)

Примером ловит



и такое



, а должно только такое

(Отредактировано автором: 27 Марта, 2014 - 18:39:16)

 
 Top
IllusionMH
Отправлено: 27 Марта, 2014 - 19:04:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




tempo, так добавьте начало ^ и конец строки $ в регулярку если ничего другого быть не должно
 
 Top
tempo
Отправлено: 27 Марта, 2014 - 19:17:33
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




IllusionMH пишет:
tempo, так добавьте начало ^ и конец строки $ в регулярку если ничего другого быть не должно


может быть но раздельно с хэштегом

(Отредактировано автором: 27 Марта, 2014 - 19:17:48)

 
 Top
IllusionMH
Отправлено: 27 Марта, 2014 - 20:45:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




tempo, тогда поставьте свое "раздельно" (\s или что там еще у вас может быть)
 
 Top
tempo
Отправлено: 27 Марта, 2014 - 20:52:13
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




IllusionMH пишет:
tempo, тогда поставьте свое "раздельно" (\s или что там еще у вас может быть)


в том то и вся суть что я не знаю как, потому и написал сюда

вот к примеру как должно быть

#tag - true
text #tag text - true
text #tag -true
text#tag - false


буду благодарен за помощь.

(Отредактировано автором: 27 Марта, 2014 - 20:52:51)

 
 Top
IllusionMH
Отправлено: 27 Марта, 2014 - 20:54:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




tempo, так ставьте пробел или начало строки, в чем трабл?
CODE (htmlphp):
скопировать код в буфер обмена
  1. /(?:^|\s)#(\S{1,24}+)(?:\s|$)/u
 
 Top
tempo
Отправлено: 27 Марта, 2014 - 20:55:48
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




IllusionMH пишет:
tempo, так ставьте пробел или начало строки, в чем трабл?
CODE (htmlphp):
скопировать код в буфер обмена
  1. /(?:^|\s)#(\S{1,24}+)(?:\s|$)/u


говорил же. что правильно не умею, можно сказать вообще не умею
(Добавление)
Делаю замену через preg_replace(), и пробелы пропадают. Думаю вы знаете почему, и знаю, возможно я не конкретно спросил, простите в таком случаи.
(Добавление)
Прошу прощение. Все правильно. большое вам спасибо!
 
 Top
DlTA
Отправлено: 27 Марта, 2014 - 23:13:52
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




/\b#(\w{1,24})\b/

\b - Граница слова wikipedia

(Отредактировано автором: 27 Марта, 2014 - 23:15:39)

 
 Top
tempo
Отправлено: 18 Апреля, 2014 - 14:21:42
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




IllusionMH пишет:
tempo, так ставьте пробел или начало строки, в чем трабл?
CODE (htmlphp):
скопировать код в буфер обмена
  1. /(?:^|\s)#(\S{1,24}+)(?:\s|$)/u


Не мог никак зайти на этот сайт.. есть один недостаток в вашем регулярном выражении, оно работает через один хэштег
(Добавление)
DlTA пишет:
/\b#(\w{1,24})\b/

\b - Граница слова wikipedia


Данное регулярное выражение вообще не находит совпадений
 
 Top
IllusionMH
Отправлено: 18 Апреля, 2014 - 14:28:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




tempo, результат для пиведенных строк совпадает с ожиданиями.
tempo пишет:
оно работает через один хэштег

Если вы пытаетесь работать с принципиально другими строками, чем выше, тогда она может и не сработать.
Подробней с примерами где сработало а где нет.
 
 Top
tempo
Отправлено: 18 Апреля, 2014 - 14:34:24
Post Id


Гость


Покинул форум
Сообщений всего: 90
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




IllusionMH пишет:
tempo, результат для пиведенных строк совпадает с ожиданиями.
tempo пишет:
оно работает через один хэштег

Если вы пытаетесь работать с принципиально другими строками, чем выше, тогда она может и не сработать.
Подробней с примерами где сработало а где нет.


синий это ссылка(так должно быть при нахождении), черный просто текст(не найдено)

вот к примеру 4 хэштега подряд
Прикреплено изображение
Безымянный.png

(Отредактировано автором: 18 Апреля, 2014 - 14:35:14)

 
 Top
IllusionMH
Отправлено: 18 Апреля, 2014 - 14:57:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




tempo, оно цепляло пробелы после слова.
/(?<=^|\s)#\S{1,24}+(?=$|\s)/u вот теперь не должно цеплять.
 
 Top
duhon
Отправлено: 22 Апреля, 2014 - 15:51:14
Post Id



Гость


Покинул форум
Сообщений всего: 72
Дата рег-ции: Нояб. 2011  


Помог: 5 раз(а)




можно просто
PHP:
скопировать код в буфер обмена
  1. //Output for => 5.3.4
  2. $var = array(
  3.         '#tag',
  4.         'text #tag text',
  5.         'text #tag',
  6.         'text#tag',
  7. );
  8. $res = preg_replace('/\B#(\S{1,24}+)/u', '#<$1>' , $var);
  9. print_r($res);
  10. /*Array
  11. (
  12.     [0] => #<tag>
  13.     [1] => text #<tag> text
  14.     [2] => text #<tag>
  15.     [3] => text#tag
  16. )*/
  17. echo preg_replace('/\B#(\S{1,24}+)/u', '<$0>' , '#111 тапинамбур#222 #333 #444'); // <#111> тапинамбур#222 <#333> <#444>


P.S. как бонус срабатывает якорное ускорение работы регулярки
P.S.S если php старая то можно и так '/(?<!\S)#\S{1,24}+/u' (но лучше поменять php версию)

(Отредактировано автором: 22 Апреля, 2014 - 16:26:16)

 
 Top
Sanek_OS9
Отправлено: 06 Сентября, 2014 - 21:48:49
Post Id



Гость


Покинул форум
Сообщений всего: 115
Дата рег-ции: Окт. 2012  
Откуда: Украина


Помог: 0 раз(а)




duhon пишет:
можно просто
PHP:
скопировать код в буфер обмена
  1. //Output for => 5.3.4
  2. $var = array(
  3.         '#tag',
  4.         'text #tag text',
  5.         'text #tag',
  6.         'text#tag',
  7. );
  8. $res = preg_replace('/\B#(\S{1,24}+)/u', '#<$1>' , $var);
  9. print_r($res);
  10. /*Array
  11. (
  12.     [0] => #<tag>
  13.     [1] => text #<tag> text
  14.     [2] => text #<tag>
  15.     [3] => text#tag
  16. )*/
  17. echo preg_replace('/\B#(\S{1,24}+)/u', '<$0>' , '#111 тапинамбур#222 #333 #444'); // <#111> тапинамбур#222 <#333> <#444>


P.S. как бонус срабатывает якорное ускорение работы регулярки
P.S.S если php старая то можно и так '/(?<!\S)#\S{1,24}+/u' (но лучше поменять php версию)


Спасибо все работает мне пригодилось)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB