Помогите регулярку написать

Pingvin22

Новичок
Помогите регулярку написать

есть строки
PHP:
$s1="Авиабилеты в Барнаул от 12609 руб";
$s2="Авиабилеты в Ханты Мансийск от 4694 руб.";
$s3="Авиабилеты в Симферополь";
Нужно вытащить название Города. Пытаюсь написать одну регулярку на все условия.

префикс "Авиабилеты в " есть всегда, "от 12609 руб" может быть а может и небыть

пробовал уже и так
PHP:
$pattern="/^Авиабилеты в ([a-zA-Zа-яА-Я-\s]+(?! от))/is";
и так
PHP:
$pattern="/^Авиабилеты в ([a-zA-Zа-яА-Я-\s]+)(?: от)?/is";
и с жадностью игрался но всеровно не получается одна регулярка на все условия
 

regii

Новичок
отрезай строковыми функциями то, что после "Авиабилеты в " :)
 

Pingvin22

Новичок
Автор оригинала: regii
отрезай строковыми функциями то, что после "Авиабилеты в " :)
Да я хотел бы именно одну регулярку, всякие преобразования и извращения нехочется
 

Pingvin22

Новичок
ладно уговорили... распарсил с помощью строковых функций...

но тогда хотябы для общего развития объясните мне как это одной регуляркой распарсить
 

Pingvin22

Новичок
Автор оригинала: Mr_Max
Чесно-чесно?
В студию! :)
Что за вопросы, здесь нет ничего сложного если парсить строковыми функциями. Другое дело в том что задача у меня немного посложнее поэтому я и хотел регулярку т.к. все остальное сделано на регулярках

ну если не верите то вот


PHP:
...
$t=$title->textContent;

$t=mb_convert_encoding($t, 'Windows-1251', 'UTF-8');

$t=explode(" от ",$t);

$t=$t[0];

$pattern="/^Авиабилеты в ([a-zA-Zа-яА-Я-_0-9\s]+)/is";

if (preg_match($pattern,$t,$result)) 

...
 

Pingvin22

Новичок
Автор оригинала: HraKK
У индусов код стырил?)
у каких еще индусов, это мой код из корпоративного проекта.

На этом форуме больше не помогают? Всем нужно только чтото доказывать?
 

baev

‹°°¬•
Команда форума
Вообще-то «регулярные выражения» — это средство обработки текстовых документов. Инструмент, облегчающий работу секретаршам.

При чём тут «программирование на PHP»?
 

StUV

Rotaredom
Нужно вытащить название Города.
пожалуйста:
PHP:
$s1="Авиабилеты в Барнаул от 12609 руб";
$s2="Авиабилеты в Ханты Мансийск от 4694 руб.";
$s3="Авиабилеты в Симферополь";

$pattern = '~^Авиабилеты в (.+)(?:(?: от (?:.+)|$))~iU';

preg_match($pattern, $s1, $matches);
var_dump($matches);

preg_match($pattern, $s2, $matches);
var_dump($matches);

preg_match($pattern, $s3, $matches);
var_dump($matches);
на указанных примерах работает =)

-~{}~ 07.06.07 10:10:

а можно так:

PHP:
$str = array();
$str[] = "Авиабилеты в Барнаул от 12609 руб";
$str[] = "Авиабилеты в Ханты Мансийск от 4694 руб.";
$str[] = "Авиабилеты в Симферополь";

for ($i = 0; $i < count($str); $i++)
{
        $p1 = 13;
        if (false === ($p2 = strpos($str[$i], ' от ')))
        {
                $p2 = strlen($str[$i]);
        }
        $p2 -= $p1;
        var_dump(substr($str[$i], $p1, $p2));
}
в общем дело вкуса =)
первый способ лучше если придется вырезать еще чего-нить
второй - если задача поставлена as-is.
 

Pingvin22

Новичок
Автор оригинала: StUV
PHP:
$pattern = '~^Авиабилеты в (.+)(?:(?: от (?:.+)|$))~iU';
Спасибо точто нужно! Я какраз немог придумать как вот это
PHP:
(?:(?: от (?:.+)|$))
правильно записать.

Автор оригинала: StUV
первый способ лучше если придется вырезать еще чего-нить
второй - если задача поставлена as-is.
еслиб было так все просто ябы и немучался с регулярками
 
Сверху