检查字符串是否包含IP地址

bru*_*rux 3 c# regex

我有一个文件加载到流阅读器中.该文件包含分散的IP地址.在每个IP地址之前和之后,如果有帮助,则为"\".此外,每行的第一个"\"始终在IP地址之前,在第一个之前没有其他"\".

我已经知道我应该使用while循环遍历每一行,但我不知道其余的过程:<

例如:

由Stormix.de提供支持\ 93.190.64.150\7777\False

Cupserver\85.236.100.100\8178 \假

Euro Server\217.163.26.20\7778\False

在第一个例子中我需要"93.190.64.150"在第二个例子中我需要"85.236.100.100"在第三个例子中我需要"217.163.26.20"

我真的很难解析/拼接/切割:s

提前致谢

***我要求将IP保留在一个字符串中,bool返回不足以满足我的要求.

Jay*_*Jay 12

using System.Text.RegularExpressions;

…

var sourceString = "put your string here";
var match = Regex.Match(sourceString, @"\b(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b");
if(match.Success) Console.WriteLine(match.Captures[0]);
Run Code Online (Sandbox Code Playgroud)

这将匹配任何IP地址,但也999.999.999.999.如果您需要更精确,请参阅此处的详细信息:http://www.regular-expressions.info/examples.html

该网站有很多很好的信息和正则表达式,这是一种特定于域的语言,在大多数流行的编程语言中用于文本模式匹配.实际上,我认为该网站是由Mastering Regular Expressions的作者整理而成的.

更新

我修改了上面的代码来捕获IP地址,如您所请求的那样(通过在IP地址模式周围添加括号).现在我们检查以确保使用该Success属性匹配,然后您可以使用Captures[0](因为我们只有一个捕获组,我们知道使用第一个索引,0).


Jon*_*eet 6

编辑:编辑考虑到"开始和结束时的斜线"部分.

尝试将每一行与正则表达式匹配(全部作为一个字符串;为了可读性而拆分).

\\(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\
Run Code Online (Sandbox Code Playgroud)

完整样本:

using System;
using System.Text.RegularExpressions;

class Program
{
    private static readonly Regex Pattern = new Regex
        (@"\\(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}" +
         @"(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\");


    static void Main(string[] args)
    {
        Console.WriteLine(ContainsAddress("Bad IP \\400.100.100.100\\ xyz"));
        Console.WriteLine(ContainsAddress("Good IP \\200.255.123.100\\ xyz"));
        Console.WriteLine(ContainsAddress("No IP \\but slashes\\ xyz"));
        Console.WriteLine(ContainsAddress("Long IP \\123.100.100.100.100\\ x"));
    }

    static bool ContainsAddress(string line)
    {
        return Pattern.IsMatch(line);        
    }
}
Run Code Online (Sandbox Code Playgroud)