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

我有一个文件加载到流阅读器中。 该文件包含分散的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返回不足以满足我的要求。

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]); 

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

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

更新

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

编辑:编辑考虑到“开始和结束时的斜线”部分。

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

 \\(?:(?: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]?)\\ 

完整样本:

 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); } } 

看起来,对于每一行,你正在寻找"^.*?\\(?

[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\\.*$"

打破这个:

^ – 匹配行的开头,有助于确保您在正确的点开始匹配。

。*? – 匹配任何字符零次或多次,但尽可能少。

\ – 匹配反斜杠字符。 再加上前两个术语,这将使我们得到一条线的第一个反斜杠,这样我们就可以捕获下一个术语。

(?) – 指定可在匹配中引用的命名字符组。 完整匹配的文本将是按照编写方式的整行,但这个命名组将只是您在匹配中寻找的内容。

[0-9] {1,3} – 匹配1到3位数字符的序列。 [0-9]相当于\ d但是我发现当正则表达式中反斜杠的数量较少,并且通常在字符串中看到的字符数量更多时,它更容易理解。

。 – 匹配一段时间。

。* – 匹配任何字符零次或多次。 用来跳到最后。

$ – 匹配一行的结尾。