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 :: Вычленение слов в русскоязычном тексте
Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2008
Помог: 0 раз(а)
Имеем текст:
Цитата:
2-комнатную кв. , ремонт, угловая, перепланировка, цена - 85000 у.е. по курсу в тенге, продам.
Конт. тел.: 43-89-63, 8 701 570 7991 .
пытаемся выделить слово "ремонт" при условии что оно есть. Это слово должно попасть в отдельный "карман".
Шаблон: /.*(ремонт)?.*/
Но карман даже не организуется, как будто слова нет. Если же убрать вопросительный знак, то все нормально - есть "карман" и в нем слово "ремонт". Но тогда возникнет ошибка при обработке текста не содержащего слова "ремонт".
С латиницей, в этих случаях - все нормально, а вот с кириллицей - проблема. Есть ли решение?
Гость
Отправлено: 18 Февраля, 2009 - 11:08:51
УДАЛЁН
ЯСНЕЕ ВОПРОСЫ МОЖНО ПИСАТЬ???!!! ТУТ НЕ ТЕЛЕПАТЫ Отредактировано администратором: EuGen, 18 Февраля, 2009 - 11:21:13 Пожалуйста, не нарушайте правил форума (В частности, злоупотребление словами в верхнем регистре)
EuGen
Отправлено: 18 Февраля, 2009 - 11:22:10
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Прошу точнее сформулировать задачу, пока не до конца понятно.
Что за "карман" к примеру..
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Roman
Отправлено: 18 Февраля, 2009 - 12:48:14
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2008
Помог: 0 раз(а)
Под словом "карман"-имеется в виду отдельное значение в результирующем массиве команды preg_match().Иногда такой термин ("карман") применяется к результату работы захватывающих подмасок. Мне кажется интуитивно понятным, что в данном контексте "карман" означает сущность или объект являющийся составляющей частью другой сущности или объекта, но тем не менее выделенный отдельно. (Добавление)
Krist_ALLа прошу не беспокоится.
EuGen
Отправлено: 18 Февраля, 2009 - 14:58:18
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Roman
Отправлено: 18 Февраля, 2009 - 16:21:11
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2008
Помог: 0 раз(а)
Общая задача несколько сложнее.В любом случае в результирующий массив должна попасть строка полностью (это не совсем так, но упрощая задачу можно сказать что и так), но в случае если строка содержит слово "ремонт" оно должно попасть в отдельную переменную рез.массива. В случае применения же выражения приведенного тобой мы вообще не получим рез.массива в том случае если нет в нем слова "ремонт". Так ведь?. Пробовал всякое и локали и перекодировки, что то ничего не получается. Вообще складывается мнение что при помощи рег выражений не очень эффективно сложно-разбирать кириллические строки (а может быть и строки вообще). Однако решение данной задачи нашел - применил шаблон:/.*((ремонт)|()).*/, и получил нужный результат.
EuGen
Отправлено: 18 Февраля, 2009 - 16:26:12
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Roman пишет:
Общая задача несколько сложнее.
Ну так нужно было полностью сформулировать )
Насчет рег. выражений не уверен, пока что лучше и мощнее инструмента нет.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Roman
Отправлено: 19 Февраля, 2009 - 12:24:00
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2008
Помог: 0 раз(а)
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).
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.