c # регулярное выражение для извлечения ссылки после = - PullRequest
0 голосов
/ 24 октября 2010

Не удалось найти лучший заголовок, но мне нужно Regex для извлечения ссылки из примера ниже.

snip...  flashvars.image_url = 'http://domain.com/test.jpg' ..snip

при условии, что regex - лучший способ.

спасибо

Ответы [ 3 ]

1 голос
/ 24 октября 2010

Рассмотрим следующий пример кода.Он показывает, как можно извлечь из предоставленной строки.Но я расширил некоторые строки.Как правило, использование. * Слишком всеобъемлющее (как показано в примере ниже).

Суть в том, что есть несколько способов сделать то, что вы спрашиваете, в первом ответе используется «осмотр«В то время как второй предлагает« групповой »подход.Выбор в основном зависит от ваших фактических данных.

        string[] tests = {
                @"snip...  flashvars.image_url = 'http://domain.com/test.jpg' ..snip",
                @"snip...  flashvars.image_url = 'http://domain.com/test.jpg' flashvars2.image_url = 'http://someother.domain.com/test.jpg'",
        };
        string[] patterns = {
                @"(?<==\s')[^']*(?=')",
                @"=\s*'(.*)'",
                @"=\s*'([^']*)'",
                             };
        foreach (string pattern in patterns)
        {
            Console.WriteLine();
            foreach (string test in tests)
                foreach (Match m in Regex.Matches(test, pattern))
                {
                    if (m.Groups.Count > 1)
                        Console.WriteLine("{0}", m.Groups[1].Value);
                    else
                        Console.WriteLine("{0}", m.Value);
                }
        }
0 голосов
/ 24 октября 2010

Простое регулярное выражение для этого будет @"=\s*'(.*)'".

0 голосов
/ 24 октября 2010

Редактировать: новое регулярное выражение, соответствующее вашему отредактированному вопросу:

Вы должны соответствовать тому, что между кавычками, после =, верно?

@"(?<==\s*')[^']*(?=')"

должно делать.1008 *(?<==\s*') утверждает, что есть =, за которым, возможно, следуют пробел, за которым следует ', непосредственно перед нашей текущей позицией (положительный взгляд сзади).

[^']* соответствует любому числу не- ' символов.

(?=') утверждает, что совпадение прекращается до следующего '.

Это регулярное выражение не проверяет, действительно ли внутри этих кавычек есть URL.Если вы хотите сделать это, используйте

@"(?<==\s*')(?=(?:https?|ftp|mailto)\b)[^']*(?=')"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...