为什么这个C#Regex不工作?

时间:2013-12-07 04:28:51

标签: c# regex

我有以下字符串(来自大型HTML字符串):

href="/cgi-bin/pin.cgi?pin=94841&sid=9548.1386389012.v1"><

这是我的代码:

var sids = Regex.Matches( htmlCode, "sid=(.)\">" );

我不会撤回任何结果。我的正则表达式是否正确?

3 个答案:

答案 0 :(得分:1)

这应该是:

var str = @"href=""/cgi-bin/pin.cgi?pin=94841&sid=9548.1386389012.v1"">";
var sid = Regex.Match(str, @"sid=([^""]*)");
Console.WriteLine (sid.Groups[1].Value);

您最初发布的内容是错误的,因为“。”充当通配符,你呈现它的方式意味着它只捕获1个字符,通配符的问题是它们很难停止直到你到达行尾,所以除非必须,否则永远不要使用它们。

答案 1 :(得分:0)

.仅匹配单个字符。要匹配多个字符,您应使用*+修饰符:(.+);或者更优选的是非贪婪版本:(.+?)

如果可能,请使用@"verbatim string literal"进行正则表达式。

var sids = Regex.Matches(htmlCode, @"sid=(.+?)""");

请参阅demo run

答案 2 :(得分:0)

我认为你非常接近。考虑对你的正则表达式进行以下微小改动......

sid=.*?\">

祝你好运!