Вопрос по регулярным выражениям
my.domain.tld:[172.16.7.15]
Возможно ли в принципе при помощи регекса проанализировать на соответствие паттерну только, например, имя хоста? Мне нужно, например, анализировать имя хоста на встречающиеся цифры в имени ну и т.п.
P.S. Не надо мне говорить, что это подход через задний проход - легче применить функцию типа substr_xxx.. и далее уже использовать регулярку. Я не пишу программу и ограничен в использовании только регулярными выражениями. Заранее спасибо.
P.P.S Была мысль, что нужен ленивый движок, но все движки, которые мне встречались в реальной жизни (perl, posix basic/extended) пытаются найти максимальное соответствие. Буду благодарен рациональным мыслям, наводкам, подсказкам, соображениям.. Ещё раз заранее спасибо.
Цитата: igor_nf
Есть некая строка. Мне нужно при помощи регулярного выражения проанализировать её определённую подстроку. Пример строки:
my.domain.tld:[172.16.7.15]
Возможно ли в принципе при помощи регекса проанализировать на соответствие паттерну только, например, имя хоста? Мне нужно, например, анализировать имя хоста на встречающиеся цифры в имени ну и т.п.
P.S. Не надо мне говорить, что это подход через задний проход - легче применить функцию типа substr_xxx.. и далее уже использовать регулярку. Я не пишу программу и ограничен в использовании только регулярными выражениями. Заранее спасибо.
P.P.S Была мысль, что нужен ленивый движок, но все движки, которые мне встречались в реальной жизни (perl, posix basic/extended) пытаются найти максимальное соответствие. Буду благодарен рациональным мыслям, наводкам, подсказкам, соображениям.. Ещё раз заранее спасибо.
my.domain.tld:[172.16.7.15]
Возможно ли в принципе при помощи регекса проанализировать на соответствие паттерну только, например, имя хоста? Мне нужно, например, анализировать имя хоста на встречающиеся цифры в имени ну и т.п.
P.S. Не надо мне говорить, что это подход через задний проход - легче применить функцию типа substr_xxx.. и далее уже использовать регулярку. Я не пишу программу и ограничен в использовании только регулярными выражениями. Заранее спасибо.
P.P.S Была мысль, что нужен ленивый движок, но все движки, которые мне встречались в реальной жизни (perl, posix basic/extended) пытаются найти максимальное соответствие. Буду благодарен рациональным мыслям, наводкам, подсказкам, соображениям.. Ещё раз заранее спасибо.
еще раз и медленно. что нужно сделать? из приведенной строки анализировать только то, что до :, а остальное игнорировать?
Цитата: squirL
еще раз и медленно. что нужно сделать? из приведенной строки анализировать только то, что до :, а остальное игнорировать?
Да, именно так
первый - это просто выполнять составить шаблон по разделителю: ^"анализирующий шаблон"[COLOR="Red"]:[/COLOR].*$
второй - вырезать при помощи регулярки интересующий шаблон, а затем обрабатывать как самостоятельный образец. в perl, например, это реализуется сохраняющими круглыми скобками: блабла("искомый_шаблон")блабла - все что в скобках - сохраняется в специальную переменную.
ну и еще
Цитата:
все движки, которые мне встречались в реальной жизни (perl, posix basic/extended) пытаются найти максимальное соответствие
ты упустил из виду, что все движки поддерживают ограничение жадности квантификаторов
Код:
^(?<hostname>.+):\[(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3})\]$
Код:
// в образец добавлена директива, включающая мультилайн
const string pattern =
@"(?m-isx:^\s*(?<hostname>.+)\s*:\s*\[(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]\s*$)";
Regex regex = new Regex(pattern);
const string sampleString = "my.domain.tld:[172.16.7.15]\nforum.codenet.ru:[154.0.1.245]";
foreach (Match match in regex.Matches(sampleString))
Console.WriteLine(match.Groups["hostname"].Value);
const string pattern =
@"(?m-isx:^\s*(?<hostname>.+)\s*:\s*\[(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]\s*$)";
Regex regex = new Regex(pattern);
const string sampleString = "my.domain.tld:[172.16.7.15]\nforum.codenet.ru:[154.0.1.245]";
foreach (Match match in regex.Matches(sampleString))
Console.WriteLine(match.Groups["hostname"].Value);
[quote=Squirl]
ты упустил из виду, что все движки поддерживают ограничение жадности квантификаторов
[/quote]
Не нашёл, честно говоря - как, например, тот же grep заставить быть ленивым. Видимо, опять же, посмотрев man по диагонали за 3 минуты, решил, что нет возможности :).