簡體   English   中英

C#正則表達式提取=后的鏈接

[英]c# regex to extract link after =

找不到更好的標題,但我需要一個正則表達式從下面的示例中提取鏈接。

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

假設正則表達式是最好的方法。

謝謝

考慮以下示例代碼。 它顯示了如何從您提供的字符串中提取。 但是我在字符串上做了一些擴展。 通常,。*的使用范圍太廣(如以下示例所示)。

要點是,有幾種方法可以完成您要問的事情,給出的第一個答案使用“環顧四周”,而第二個則建議使用“分組”方法。 選擇主要取決於您的實際數據。

        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);
                }
        }

編輯:與您編輯的問題相匹配的新正則表達式:

您需要匹配在引號之間,在= ,對不對?

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

應該做。

(?<==\\s*')斷言,在當前位置(正向后)之前,有一個= ,后跟空白,后跟一個'

[^']*與任意數量的非'字符匹配。

(?=')斷言比賽在下一個'之前停止。

此正則表達式不會檢查這些引號內是否確實存在URL。 如果要這樣做,請使用

@"(?<==\s*')(?=(?:https?|ftp|mailto)\b)[^']*(?=')"

一個簡單的正則表達式是@"=\\s*'(.*)'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM