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]   

> Без описания
supmener
Отправлено: 19 Июня, 2016 - 17:31:37
Post Id


Частый гость


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


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




Пожалуйста помогите. Нужно задать расстояние между искомыми словами, "от" и "до" слов между ними. Например для "болезнь ноги". Чтобы найдено было также "болезнь связки правой голени ноги". То есть здесь дополнительно появилось 3 слова между ключевыми. А может быть и другое количество, например "болезнь правой ноги". То есть чтобы можно было указать интервал, образно "0-3" для этих примеров.
 
 Top
Строитель Модератор
Отправлено: 19 Июня, 2016 - 18:35:27
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




supmener пишет:
Чтобы найдено было также "болезнь связки правой голени ноги". То есть здесь дополнительно появилось 3 слова между ключевыми. А может быть и другое количество, например "болезнь правой ноги"
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = 'какой-то текст ... болезнь связки правой голени ноги ... ';//или болезнь ноги
  3. $pat = '~болезнь.*ноги~iu';
  4. preg_match($pat, $str, $arr);
  5.  
  6. echo $arr[0];//болезнь связки правой голени ноги

(Отредактировано автором: 19 Июня, 2016 - 18:37:29)

 
 Top
supmener
Отправлено: 19 Июня, 2016 - 18:38:56
Post Id


Частый гость


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


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




Спасибо, может пригодиться. А можно ли написать вариант одной строкой без операторов PHP? Планирую задействовать в данный момент в локальном поисковике для поиска в документах с поддержкой регулярных выражений.
 
 Top
Строитель Модератор
Отправлено: 19 Июня, 2016 - 18:48:32
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




supmener пишет:
А можно ли написать вариант одной строкой без операторов PHP?
Ну, сам шаблон вот ~болезнь.*ноги~iu, а уж подойдёт ли он для ваших целей, я не знаю.
 
 Top
supmener
Отправлено: 19 Июня, 2016 - 18:51:20
Post Id


Частый гость


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


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




А почему в обоих примерах у Вас не видно того, что относится к образно обозначенному интервалу "0-3" между ключевыми словами?
 
 Top
Строитель Модератор
Отправлено: 19 Июня, 2016 - 18:59:43
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




supmener пишет:
А почему в обоих примерах у Вас не видно того, что относится к образно обозначенному интервалу "0-3" между ключевыми словами?
Я предположил, что требуется поиск по ключевым словам, поэтому прописал их в шаблоне, а вместо интервала использовал любое количество любых символов. Если требуется чётко задать от 0 до 3 слов между ключевыми, то попробую составить новый шаблон.
 
 Top
supmener
Отправлено: 19 Июня, 2016 - 19:02:27
Post Id


Частый гость


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


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




Да, нужна возможность чётко задавать интервал количества слов. А что значат знаки:
~болезнь.*ноги~iu, который выделил жирным шрифтом? И ~ тоже не знаю за что отвечает.

(Отредактировано автором: 19 Июня, 2016 - 19:04:32)

 
 Top
Строитель Модератор
Отправлено: 19 Июня, 2016 - 20:39:26
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




i - регистронезависимый
u - юникод
~ - ограничитель шаблона
supmener пишет:
Да, нужна возможность чётко задавать интервал количества слов
Попробую, но не гарантирую, что смогу написать.
 
 Top
supmener
Отправлено: 19 Июня, 2016 - 20:41:19
Post Id


Частый гость


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


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




Хорошо, буду ждать.
 
 Top
Строитель Модератор
Отправлено: 19 Июня, 2016 - 21:30:36
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




supmener, вот что у меня получилось:

~болезнь(\s{1}|\s[а-я]+\s|\s[а-я]+\s[а-я]+\s|\s[а-я]+\s[а-я]+\s[а-я]+\s)ноги~iu

Находит комбинации:

1. болезнь связки правой голени ноги
т.е., 3 промежуточных слова

2. болезнь связки правой ноги
т.е., 2 промежуточных слова

3. болезнь правой ноги
т.е., 1 промежуточное слово

Если промежуточных слов больше 3-х, например болезнь связки правой ... голени ноги, то совпадений не будет.
P.S.: наверняка шаблон можно и покороче написать, но у меня вышел только такой вариант.
 
 Top
supmener
Отправлено: 19 Июня, 2016 - 21:32:26
Post Id


Частый гость


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


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




Большое спасибо. Завтра планирую испытать.
 
 Top
Строитель Модератор
Отправлено: 19 Июня, 2016 - 21:35:22
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




supmener пишет:
Большое спасибо. Завтра планирую испытать.
Я проверял на локалке - код работает
PHP:
скопировать код в буфер обмена
  1. $str = 'какой-то текст ... болезнь связки правой голени ноги ... ';
  2. $pat = '~болезнь(\s{1}|\s[а-я]+\s|\s[а-я]+\s[а-я]+\s|\s[а-я]+\s[а-я]+\s[а-я]+\s)ноги~iu';
  3. preg_match($pat, $str, $arr);
  4. echo $arr[0];//болезнь связки правой голени ноги
 
 Top
supmener
Отправлено: 19 Июня, 2016 - 21:35:32
Post Id


Частый гость


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


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




А найдёт также "болезнь ноги"?
 
 Top
Строитель Модератор
Отправлено: 19 Июня, 2016 - 21:37:33
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




supmener пишет:
А найдёт также "болезнь ноги"?
Да, конечно Улыбка
Тема закрыта!
 
 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