regex

Vodnik

подскажите как правильно выделить из текста все слова в php
пытаюсь делать:
preg_match_all("/[\s,.\[\]]+?([а-я\-]+)[\s,.\]\[]+?/i", $data["text"], $pat_array);

ни фигна не выходит...

Vodnik

блин, я тут подумал может у preg_match проблемы с уникодом? как назло инет закончился

uncle17

а что называть "словом"?

Vodnik

человеческое слово на русском языке

ghytr00013

Я бы сделал вот так:
/ [^а-я\-]+([а-я\-]+)[^а-я\-]+/ i

А под твою маску, по-моему, подойдет любая одиночная буква. И еще: там какая-то буква, то ли "ё", то ли "й" не входит в диапазон а-я. Надо добавить.

rosali

Текст может начинаться или заканчиваться на слово, поэтому [^а-я\-]+ нельзя писать ни справа ни слева. Эти конструкции вообще не нужны, регулярные выражения по умолчанию жадные. И кстати лучше не лениться и написать
  /[йцукенгшщзхъэждлорпавыфячсмитьбюёЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮЁ\-]+/g 

Vodnik

а что значит флажок g?
я тоже типа такого сделал, но походу preg_match корявао с уникодом работает

uncle17

а что значит флажок g?
g=Global - поиск всех совпадений, а не только первого

Vodnik

в пхп такого значка нету

Vodnik

а, в пхп для этого отдельная функция

uncle17

я в курсе:) Но в перле именно так пишется

Vodnik

блин, кстати, так сработало )
Оставить комментарий
Имя или ник:
Комментарий: