2010-10-24 54 views
0

找不到更好的标题,但我需要一个正则表达式从下面的示例中提取链接。c#正则表达式提取链接后=

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

假设正则表达式是最好的方法。

感谢

+0

我编辑了这个问题,以反映我认为的意图。如果我错了,请提前道歉。 – 2010-10-24 10:43:02

回答

1

请考虑以下示例代码。它显示了如何从您提供的字符串中提取。但是我已经扩展了一些字符串。一般来说,。*的使用是包罗万象的(如下例所示)。

要点是,有几种方法可以做你正在问的问题,给出的第一个答案使用了“环视”,而第二个答案提出了“组”方法。选择主要取决于您的实际数据。

 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

编辑:新的正则表达式匹配您编辑的问题:

你需要匹配的报价之间有什么,一个=后,对不对?

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

应该做的。

(?<==\s*')断言有一个=,可选后跟空格,然后是',就在我们当前位置之前(正向倒序)。

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

(?=')断言比赛在下一个'之前停止。

这个正则表达式不会检查这些引号内是否确实存在URL。如果你想这样做,使用

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

一个简单的正则表达式,这将是@"=\s*'(.*)'"