[英]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.