如何获得多个正则表达式匹配c#

时间:2014-11-13 21:14:29

标签: c# regex

我有一个包含多个IP的流阅读器,位于其中。我想自动从流和端口中提取所有IP。

基本上它来自get请求的响应,所有ips和端口都表示如下:

<th>xx.xx.xx.xx</th>
<th>port</th>

我已经有一个正则表达式来获取ip。基本上我想要做的是找到每个匹配,获取匹配,向前移动"</th><th>".Length个字节,然后检索端口,并将其作为IPAddress对象插入列表。

问题是当正则表达式需要检索多个结果时,如何做到这一点。

1 个答案:

答案 0 :(得分:1)

冒着召唤各种犯规生物的风险(我不是主要指SO用户),这里有一个小单元测试:

[TestMethod]
public void RegexTest()
{
    var input = "<th>192.168.1.1</th>\r<th>443</th>";

    var regex = @"(?s)<th>([0-9\.]*?)</th>.*?<th>([0-9]*?)</th>";
    var matches = Regex.Matches(input, regex);

    foreach (Match match in matches)
        Console.WriteLine("IP: {0}, port: {1}", match.Groups[1].Value, match.Groups[2].Value);
}

问题是,这是您通常应该避免使用正则表达式来解析HTML的原因之一,输入的确切格式变得非常重要。例如,如果您在输入中输入<th> 443</th>,则上述测试会中断。

现在去拿你的赌注和你的银子弹,他们来找我们!!