dzedzinskiy
@dzedzinskiy
Full stack developer

Как правильно написать регулярное выражение?

И как научиться писать регулярные выражения, что бы не задавать таких вопросов?

~astring_someflag_xds~2.37.0=NEEDED_STRING_TO_EXTRACT.~cha_khe_mil~2.22.0=TADA
а подстрока someflag - идентификатор того, что нужно достать NEEDED_STRING_TO_EXTRACT,
если someflag нету - тогда матчить не должно

для примера
~astbbhf_sg_fasgs~3.6.0=SOME_OTHER_STRING.~phase2~3.6.0=OLD
не должно ничего возвращать

а в случае
~trade_someflag.49.1=NEED-HELP_1A.~trade_exec.4.0=TRADER_JOE
должно возвращать NEED-HELP_1A
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
@DanKud
Конкретно для этой строки можно так:
$str = '~astbbhf_sg_fasgs~3.6.0=SOME_OTHER_STRING.~phase2~3.6.0=OLD';
preg_match('/someflag.*=(.+?)\./i', $str, $m);
$result = $m[1];

соответственно если совпадений нет, то $result будет равно null
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fzfx
@fzfx
18,5 дм
^(~[A-Za-z]+_(someflag.*?=(.+?)\.~.*|.*)|.*)

например, команда для bash с использованием perl:
echo '~astring_someflag_xds~2.37.0=NEEDED_STRING_TO_EXTRACT.~cha_khe_mil~2.22.0=TADA' \
| perl -pe 's/^(~[a-z]+_(someflag.*?=(.+?)\.~.*|.*)|.*)/\3/i'

ну или в виде скрипта на том же perl:
$_='~astring_someflag_xds~2.37.0=NEEDED_STRING_TO_EXTRACT.~cha_khe_mil~2.22.0=TADA';
s/^(~[a-z]+_(someflag.*?=(.+?)\.~.*|.*)|.*)/\3/i;
print;

для php это будет, наверное, что-то вроде:
$str = '~astring_someflag_xds~2.37.0=NEEDED_STRING_TO_EXTRACT.~cha_khe_mil~2.22.0=TADA';
preg_match('s/^(~[a-z]+_(someflag.*?=(.+?)\.~.*|.*)|.*)/i', $str, $m);
print($m[3]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы