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]   

> Описание: 2 дня мучаюсь с ней
vasnihaev
Отправлено: 20 Декабря, 2011 - 10:53:50
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2011  


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




Пишу простенький поиск, так вот есть такой момент - есть предложение, и есть запрос, нужно найти вхождения запроса, вначале каждого слова предложения, например:
Продается гараж по улице беговая, недорого.
Запрос - бег.
С помощью вот такой регулярки я нахожу вхождения только вначале слов -
CODE (htmlphp):
скопировать код в буфер обмена
  1. /^(".$word.")|\s(".$word.")/
где $word = 'бег';
Так я отсек слова типа "перебегать".
Но вот проблема, я не хочу находить слово "беговая", а лишь максимум "бегать" - т.е. максимум 3 знака после вхождения. Пробовал переписать регулярку вот так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. /^(".$word.")[a--я0-9]{0,3}|\s(".$word.")[a--я0-9]{0,3}/
, но она не работает.
Помогите пожалуйста, регулярки начал учить только вчера, поэтому не могу понять, как решить проблему.
Извиняюсь, если непонятно описал проблему.
 
 Top
LIME
Отправлено: 20 Декабря, 2011 - 11:01:30
Post Id


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


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


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




/^|\s".$word."[a-zа-яё0-9]{0,3}\s/i
ё не входит в диапазон пишем отдельно
в начале предложения слово будет с большой буквы потому модификатор i
вроде так
 
 Top
vasnihaev
Отправлено: 20 Декабря, 2011 - 11:03:51
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2011  


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




Прошу прощения, забыл указать, всё приведено в нижний регистр.
 
 Top
LIME
Отправлено: 20 Декабря, 2011 - 11:05:57
Post Id


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


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


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




ну тады без i
 
 Top
vasnihaev
Отправлено: 20 Декабря, 2011 - 11:09:35
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2011  


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




Теперь ничего не ищет, все пропускает, кажется даже вхождения нет в тексте
 
 Top
LIME
Отправлено: 20 Декабря, 2011 - 11:11:00
Post Id


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


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


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




vasnihaev дайте код
 
 Top
vasnihaev
Отправлено: 20 Декабря, 2011 - 11:19:31
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2011  


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




$arr_gquery - массив запросов, обработанный стеммером Портера.

Спойлер (Отобразить)
 
 Top
duhon
Отправлено: 21 Декабря, 2011 - 10:21:44
Post Id



Гость


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


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




vasnihaev пишет:
Пишу простенький поиск, так вот есть такой момент - есть предложение, и есть запрос, нужно найти вхождения запроса, вначале каждого слова предложения, например:
Продается гараж по улице беговая, недорого.
Запрос - бег.


попробуй так
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/\bбег\w{0,3}\b/u', 'нужно бегать но не беговая, или даже в конце беговая', $matches);

или без юникода
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/(?<![а-яё])бег[а-яё]{0,3}(?![а-яё])/', 'нужно бегать но не беговая, или даже в конце беговая', $matches);
 
 Top
vasnihaev
Отправлено: 23 Декабря, 2011 - 10:15:41
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2011  


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




попробуй так
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/\bбег\w{0,3}\b/u', 'нужно бегать но не беговая, или даже в конце беговая', $matches);

или без юникода
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/(?<![а-яё])бег[а-яё]{0,3}(?![а-яё])/', 'нужно бегать но не беговая, или даже в конце беговая', $matches);
[/quote]
Спасибо! То, что нужно!
 
 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