Обратный поиск в регулярке

Статус
В этой теме нельзя размещать новые ответы.

Super_BOT

Мастер
Регистрация
21 Апр 2009
Сообщения
226
Реакции
31
Есть примерно такая строка

"14aaa 14bbb 14ссс 23"

где 14 и 23 какие-то строки-признаки, по которым ищем, aaa, bbb, ccc - произвольный текст.
Комбинаций вида 14aaa может быть сколько угодно. Вместо пробелов может стоять какой угодно текст.

Нужно в этой строке вытащить строку ссс - то есть строка между ПОСЛЕДНЕЙ "14" и " 23"

Как это можно сделтаь? то есть по сути поиск нужно начинать с конца, сначала найти 23, и от него предыдущее
 
Есть примерно такая строка
"14aaa 14bbb 14ссс 23"
где 14 и 23 какие-то строки-признаки, по которым ищем, aaa, bbb, ccc - произвольный текст.
Комбинаций вида 14aaa может быть сколько угодно. Вместо пробелов может стоять какой угодно текст.
Нужно в этой строке вытащить строку ссс - то есть строка между ПОСЛЕДНЕЙ "14" и " 23"
Как это можно сделтаь? то есть по сути поиск нужно начинать с конца, сначала найти 23, и от него предыдущее
Ну и зачем искать с конца... Делай в два прохода или три.
Код:
priznakA.*?priznakB
priznakA.*?priznakC
Ну и так далее...
 
Ага, так то ясно, что можно рекурсивно это сделать, просто думаю такая задача должна решаться с помощью регулярных выражений.
 
Есть примерно такая строка
"14aaa 14bbb 14ссс 23"
где 14 и 23 какие-то строки-признаки, по которым ищем, aaa, bbb, ccc - произвольный текст.
Комбинаций вида 14aaa может быть сколько угодно. Вместо пробелов может стоять какой угодно текст.
Нужно в этой строке вытащить строку ссс - то есть строка между ПОСЛЕДНЕЙ "14" и " 23"
Как это можно сделтаь? то есть по сути поиск нужно начинать с конца, сначала найти 23, и от него предыдущее
можно так
PHP:
<?php
$stroka = "14aaa 14bbb 14ссс 23";
$pos = strripos($stroka,"14");
$end = strpos($stroka,"23");
echo substr($stroka,$pos,$end);
?>
 
Есть примерно такая строка
"14aaa 14bbb 14ссс 23"
где 14 и 23 какие-то строки-признаки, по которым ищем, aaa, bbb, ccc - произвольный текст.
Комбинаций вида 14aaa может быть сколько угодно. Вместо пробелов может стоять какой угодно текст.
Нужно в этой строке вытащить строку ссс - то есть строка между ПОСЛЕДНЕЙ "14" и " 23"
Как это можно сделтаь? то есть по сути поиск нужно начинать с конца, сначала найти 23, и от него предыдущее
Так
PHP:
$text = '14aaa 14bbb 14aaa23 14bbb23 14ссс23 qwe23rrrrr 14eeee';
preg_match ('#.*14(.*)23#s',$text,$matches);
echo $matches[1]; //ссс23 qwe
Или так
PHP:
$text = '14aaa 14bbb 14aaa23 14bbb23 14ссс23 qwe23rrrrr 14eeee';
preg_match ('#.*14(.*?)23#s',$text,$matches);
echo $matches[1]; //ссс
 
Из последнего, вытаскивай значение и сравнивай с начальным
 

Найти:
^.*?14(\w+).*?23\w+.*?$

Заменить:
\1

Находим от начало строки какой угодно текст до 14 со словом, далее какой угодно текст до 23 со словом и с каким угодно текстом до конца строки.

Если бы дал конкретный пример, то написал бы, а так по тому, что дал.

Пример для поиска в рамках одной строки.
Что бы все варианты учесть, то можно просто оставить
14(\w+).*?23\w+
 
Всем спасибо, пример VandJ подошел.

Фокус был в том чтобы в начале использовать .*
Так как они работают по максимому, то дойдут до последней комбинации 14.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху