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]   

> Описание: Вопрос по поведению знака "?" - 0 или 1 раз, при организации "карманов".
Roman
Отправлено: 18 Февраля, 2009 - 09:22:41
Post Id


Новичок


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


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




Имеем текст:
Цитата:
2-комнатную кв. , ремонт, угловая, перепланировка, цена - 85000 у.е. по курсу в тенге, продам.
Конт. тел.: 43-89-63, 8 701 570 7991 .

пытаемся выделить слово "ремонт" при условии что оно есть. Это слово должно попасть в отдельный "карман".
Шаблон: /.*(ремонт)?.*/
Но карман даже не организуется, как будто слова нет. Если же убрать вопросительный знак, то все нормально - есть "карман" и в нем слово "ремонт". Но тогда возникнет ошибка при обработке текста не содержащего слова "ремонт".
С латиницей, в этих случаях - все нормально, а вот с кириллицей - проблема. Есть ли решение?
 
 Top
Гость
Отправлено: 18 Февраля, 2009 - 11:08:51
Post Id


УДАЛЁН










ЯСНЕЕ ВОПРОСЫ МОЖНО ПИСАТЬ???!!! ТУТ НЕ ТЕЛЕПАТЫ


Отредактировано администратором: EuGen, 18 Февраля, 2009 - 11:21:13
Пожалуйста, не нарушайте правил форума (В частности, злоупотребление словами в верхнем регистре)
 
 Top
EuGen Администратор
Отправлено: 18 Февраля, 2009 - 11:22:10
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Прошу точнее сформулировать задачу, пока не до конца понятно.
Что за "карман" к примеру..


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Roman
Отправлено: 18 Февраля, 2009 - 12:48:14
Post Id


Новичок


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


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




Под словом "карман"-имеется в виду отдельное значение в результирующем массиве команды preg_match().Иногда такой термин ("карман") применяется к результату работы захватывающих подмасок. Мне кажется интуитивно понятным, что в данном контексте "карман" означает сущность или объект являющийся составляющей частью другой сущности или объекта, но тем не менее выделенный отдельно.
(Добавление)
Krist_ALLа прошу не беспокоится.
 
 Top
EuGen Администратор
Отправлено: 18 Февраля, 2009 - 14:58:18
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




А зачем усложнять?
Например,
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.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Roman
Отправлено: 18 Февраля, 2009 - 16:21:11
Post Id


Новичок


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


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




Общая задача несколько сложнее.В любом случае в результирующий массив должна попасть строка полностью (это не совсем так, но упрощая задачу можно сказать что и так), но в случае если строка содержит слово "ремонт" оно должно попасть в отдельную переменную рез.массива. В случае применения же выражения приведенного тобой мы вообще не получим рез.массива в том случае если нет в нем слова "ремонт". Так ведь?. Пробовал всякое и локали и перекодировки, что то ничего не получается. Вообще складывается мнение что при помощи рег выражений не очень эффективно сложно-разбирать кириллические строки (а может быть и строки вообще). Однако решение данной задачи нашел - применил шаблон:/.*((ремонт)|()).*/, и получил нужный результат.
 
 Top
EuGen Администратор
Отправлено: 18 Февраля, 2009 - 16:26:12
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Roman пишет:
Общая задача несколько сложнее.

Ну так нужно было полностью сформулировать )
Насчет рег. выражений не уверен, пока что лучше и мощнее инструмента нет.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Roman
Отправлено: 19 Февраля, 2009 - 12:24:00
Post Id


Новичок


Покинул форум
Сообщений всего: 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).
 
 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