powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Регулярное выражение, найти перед искомой подстрокой, включая саму подстроку
5 сообщений из 5, страница 1 из 1
Регулярное выражение, найти перед искомой подстрокой, включая саму подстроку
    #39951300
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
// исходная строка
'Шустрая бурая лисица прыгает через ленивого пса'

// что ищем
'ИцА пРЫГАЕт'

// надо получить
' через ленивого пса'


Решается так:
Код: php
1.
2.
3.
$str = 'Шустрая бурая лисица прыгает через ленивого пса';
$find = 'ИцА пРЫГАЕт';
echo mb_substr($str, mb_stripos($str, $find) + mb_strlen($find));


Хочется увидеть решение через регулярку.
...
Рейтинг: 0 / 0
Регулярное выражение, найти перед искомой подстрокой, включая саму подстроку
    #39951310
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/ИцА\sпРЫГАЕт(.*)/i
...
Рейтинг: 0 / 0
Регулярное выражение, найти перед искомой подстрокой, включая саму подстроку
    #39951312
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

спасибо!

з.ы. только что решил через так называемую ленивую квантификацию :)
Код: php
1.
echo preg_replace("/(.*?$find)/ui", '', $str);
...
Рейтинг: 0 / 0
Регулярное выражение, найти перед искомой подстрокой, включая саму подстроку
    #39953138
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLPowerUser
з.ы. только что решил через так называемую ленивую квантификацию :)
Код: php
1.
echo preg_replace("/(.*?$find)/ui", '', $str);


В вашем варианте имеются следующие ошибки и недочёты:
1 ) Регулярное выражение захватит пробел перед " через ленивого пса " (пробел захватывать не нужно)
2 ) Если искомая строка " ИцА пРЫГАЕт " будет содержать спецсимволы (точка, звёздочка, слеш и пр.), регулярное выражение вылетит с ошибкой
3 ) Если текст будет многострочным, содержащим несколько искомых вхождений, ваш код вернёт некорректный результат
4 ) Регулярное выражение реализует логику " удалить ненужное " (ненужного может быть много), а правильнее будет реализовать логику " найти нужное "

Я бы сделал так:
Код: php
1.
2.
3.
4.
5.
6.
7.
$str = '
Шустрая бурая лисица прыгает через ленивого пса №1
Шустрая бурая лисица прыгает через ленивого пса №2
Шустрая бурая лисица прыгает через ленивого пса №3
';
$find = 'ИцА пРЫГАЕт';
$out = preg_match_all('/'.preg_quote($find, '/').'\s*+([^\r\n]++)/iu', $str, $matches)? $matches[1]: [];


Получаем:
Код: php
1.
2.
3.
4.
5.
6.
Array
(
    [0] => "через ленивого пса №1"
    [1] => "через ленивого пса №2"
    [2] => "через ленивого пса №3"
)
...
Рейтинг: 0 / 0
Регулярное выражение, найти перед искомой подстрокой, включая саму подстроку
    #39953763
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02,

спасибо! Однозначно в копилку знаний!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Регулярное выражение, найти перед искомой подстрокой, включая саму подстроку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]