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. Roman - 18 Февраля, 2009 - 09:22:41 - перейти к сообщению
Имеем текст:
Цитата:
2-комнатную кв. , ремонт, угловая, перепланировка, цена - 85000 у.е. по курсу в тенге, продам.
Конт. тел.: 43-89-63, 8 701 570 7991 .

пытаемся выделить слово "ремонт" при условии что оно есть. Это слово должно попасть в отдельный "карман".
Шаблон: /.*(ремонт)?.*/
Но карман даже не организуется, как будто слова нет. Если же убрать вопросительный знак, то все нормально - есть "карман" и в нем слово "ремонт". Но тогда возникнет ошибка при обработке текста не содержащего слова "ремонт".
С латиницей, в этих случаях - все нормально, а вот с кириллицей - проблема. Есть ли решение?
2. Гость - 18 Февраля, 2009 - 11:08:51 - перейти к сообщению
ЯСНЕЕ ВОПРОСЫ МОЖНО ПИСАТЬ???!!! ТУТ НЕ ТЕЛЕПАТЫ
3. EuGen - 18 Февраля, 2009 - 11:22:10 - перейти к сообщению
Прошу точнее сформулировать задачу, пока не до конца понятно.
Что за "карман" к примеру..
4. Roman - 18 Февраля, 2009 - 12:48:14 - перейти к сообщению
Под словом "карман"-имеется в виду отдельное значение в результирующем массиве команды preg_match().Иногда такой термин ("карман") применяется к результату работы захватывающих подмасок. Мне кажется интуитивно понятным, что в данном контексте "карман" означает сущность или объект являющийся составляющей частью другой сущности или объекта, но тем не менее выделенный отдельно.
(Добавление)
Krist_ALLа прошу не беспокоится.
5. EuGen - 18 Февраля, 2009 - 14:58:18 - перейти к сообщению
А зачем усложнять?
Например,
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $str="2-комнатную кв. , ремонт, угловая, перепланировка, цена - 85000 у.е. по курсу в тенге, продам.
  4. Конт. тел.: 43-89-63, 8 701 570 7991 .";
  5. $m=array();
  6. preg_match("/(ремонт)/i", $str, $m);
  7. print_r($m);
  8. ?>
  9.  
6. Roman - 18 Февраля, 2009 - 16:21:11 - перейти к сообщению
Общая задача несколько сложнее.В любом случае в результирующий массив должна попасть строка полностью (это не совсем так, но упрощая задачу можно сказать что и так), но в случае если строка содержит слово "ремонт" оно должно попасть в отдельную переменную рез.массива. В случае применения же выражения приведенного тобой мы вообще не получим рез.массива в том случае если нет в нем слова "ремонт". Так ведь?. Пробовал всякое и локали и перекодировки, что то ничего не получается. Вообще складывается мнение что при помощи рег выражений не очень эффективно сложно-разбирать кириллические строки (а может быть и строки вообще). Однако решение данной задачи нашел - применил шаблон:/.*((ремонт)|()).*/, и получил нужный результат.
7. EuGen - 18 Февраля, 2009 - 16:26:12 - перейти к сообщению
Roman пишет:
Общая задача несколько сложнее.

Ну так нужно было полностью сформулировать )
Насчет рег. выражений не уверен, пока что лучше и мощнее инструмента нет.
8. Roman - 19 Февраля, 2009 - 12:24:00 - перейти к сообщению
EuGen пишет:
Насчет рег. выражений не уверен, пока что лучше и мощнее инструмента нет.

Возможно вы правы, а я погорячился. Но вот интересный, с моей точки зрения, пример:
рассматриваемый текст:
Цитата:
2-комнатную кв. , ремонт, угловая, перепланировка, цена - 8500000 у.е. по курсу в тенге, продам.
Конт. тел.: 43-89-63, 8 701 570 7991 .

шаблон preg_match:
Цитата:
/(цена\W*)|()/six

рез.массив preg_match:
Цитата:
Array ( [0] => [1] => [2] => )

Как видите захват слова "цена" не произошел, хотя есть для него ключ в массиве, то есть что? Ключ организовался а значение не было помещено? И такое только с кириллицей, с латинскими шрифтами все ок.
Дальше, если приведенный шаблон поместить в качестве первого аргумента в функции preg_replace (в качестве искомого), а вторым оставить пустую строку (на что меняем), третьим, естественно приведенный выше текст, то в результате получим:
Цитата:
2-комнатную кв. , ремонт, угловая, перепланировка, 8500000 у.е. по курсу в тенге, продам. Конт. тел.: 43-89-63, 8 701 570 7991

Т.е. все правильно сработало в результат попал текст с изъятым словом "цена". Но почему же тогда в рез.массив preg_match оно не попадает - вот этого я не понимаю!
Вероятно, когда пойму, тогда можно будет считать, что что-то смыслю в рег выражениях :0).

 

Powered by ExBB FM 1.0 RC1