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. gefard - 30 Апреля, 2016 - 22:22:50 - перейти к сообщению
Заранее конечно извините меня, но с регулярками туго у меня
щас использую рекурсию + mb_strpos
для нахождения всех слов "C D E" после "A B"
может кто опишет хоть примерно регулярку
честное слово мужики мозгов не хватает.
(Добавление)
Мужики кто сможет написать эту регулярку preg_match_all
тому 500 руб на яндекс счет, извиняйте прочего у меня нету.
потому как тупо напишите за меня чтоб я не использовал mb_strpos($str, ' ',2);
постоянно в цикле
(Добавление)
Мужики, пояснение
(Добавление)
найти после "Вася пошел гулять" два следующих слова
"в библиотеку"
"в парк"
"на набережную"
слово может содержать все символы кроме пробела
потому как пробел - это разделитель между слов
2. Строитель - 30 Апреля, 2016 - 23:53:19 - перейти к сообщению
gefard Вот попробуйте
PHP:
скопировать код в буфер обмена
  1. $subj = 'Вася пошел гулять в библиотеку';
  2. $patt = '~\w+~iu';
  3. preg_match_all($patt, $subj, $arr);
  4.  
  5. echo $arr[0][3] .' '. $arr[0][4]; //в библиотеку
3. gefard - 01 Мая, 2016 - 00:07:47 - перейти к сообщению
Строитель пишет:
gefard Вот попробуйте
PHP:
скопировать код в буфер обмена
  1. $subj = 'Вася пошел гулять в библиотеку';
  2. $patt = '~\w+~iu';
  3. preg_match_all($patt, $subj, $arr);
  4.  
  5. echo $arr[0][3] .' '. $arr[0][4]; //в библиотеку


Строитель, а что значит ~\w+~? и каким образом оно мне найдет фразу C D E после фразы A B?
4. Строитель - 01 Мая, 2016 - 00:14:13 - перейти к сообщению
gefard пишет:
а что значит ~\w+~
Это шаблон, в котором идёт поиск по словам \w произвольной длины + . Каждое найденное слово будет сохранено в отдельную ячейку массива. В конкретном тексте ~Вася пошел гулять в библиотеку~ в массиве будет 5 ключей :

$arr[0][0] == Вася
$arr[0][1] == пошел
$arr[0][2] == гулять
$arr[0][3] == в
$arr[0][4] == библиотеку

Два последних мы и используем, разделив их пробелом

echo $arr[0][3] .' '. $arr[0][4]; //в библиотеку
(Добавление)
gefard, я этот код на локалке проверил, всё ок.
5. gefard - 01 Мая, 2016 - 01:09:38 - перейти к сообщению
[quote=Строитель][/quote]
Извини, я уже бухой, 1 мая все-таки,
'~\'. $fraza .'+~'
ничего не перепутал?
яндекс счет в личку
6. Строитель - 01 Мая, 2016 - 10:58:25 - перейти к сообщению
gefard пишет:
ничего не перепутал?
Всё перепутал Радость
Ну вот второй пример
PHP:
скопировать код в буфер обмена
  1. $subj = 'A B C D E';
  2. $patt = '~\w+~iu';
  3. preg_match_all($patt, $subj, $arr);
  4. echo $arr[0][2] .' '. $arr[0][3] .' '. $arr[0][4]; //C D E

(Добавление)
найдет фразу C D E после фразы A B
7. gefard - 01 Мая, 2016 - 12:39:48 - перейти к сообщению
Строитель
твой код это explode просто

я тут прикинул

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $text = 'ворота из стали - это явное преимущесто. Стальные ворота очень красивы, и практичны. Стальные ворота надежно прослужат вам много лет. Закажите стальные ворота на нашем сайте по выгодным ценам.';
  3.  
  4.  
  5. preg_match_all("~\ворота\s(\S+)\s(\S+)\s(\S+)~iu",$text, $arr );
  6.  


Цитата:
Array
(
[0] => Array
(
[0] => ворота из стали -
[1] => ворота очень красивы, и
[2] => ворота надежно прослужат вам
[3] => ворота на нашем сайте
)

[1] => Array
(
[0] => из
[1] => очень
[2] => надежно
[3] => на
)

[2] => Array
(
[0] => стали
[1] => красивы,
[2] => прослужат
[3] => нашем
)

[3] => Array
(
[0] => -
[1] => и
[2] => вам
[3] => сайте
)

)


вот что мне нужно, пока я не смог сделать так

preg_match_all("~\Стальные ворота\s(\S+)\s(\S+)\s(\S+)~iu",$text, $arr );
(Добавление)
вот и решение

preg_match_all("/Стальные ворота\s(\S+)\s(\S+)\s(\S+)/iu",$text, $arr );

Цитата:

Array
(
[0] => Array
(
[0] => Стальные ворота очень красивы, и
[1] => Стальные ворота надежно прослужат вам
[2] => стальные ворота на нашем сайте
)

[1] => Array
(
[0] => очень
[1] => надежно
[2] => на
)

[2] => Array
(
[0] => красивы,
[1] => прослужат
[2] => нашем
)

[3] => Array
(
[0] => и
[1] => вам
[2] => сайте
)

)
8. Строитель - 01 Мая, 2016 - 22:05:29 - перейти к сообщению
gefard пишет:
твой код это explode просто
При чём тут explode просто? Просто ты не хочешь платить за конкретное решение, но тогда вопрос - зачем было кричать, что заплачу за решение?

 

Powered by ExBB FM 1.0 RC1