我正在使用 c# 进行练习,我想知道如何获得满足某些要求的字符串的子字符串。
例如,我想找出与IP对应的192.168.1.1
. 我曾考虑过正则表达式,但我不知道该怎么做,因为下面的代码没有返回任何值给我。
Regex ipV4 = new Regex(@"^\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
string s = "naieofnai555aedae192.168.1.1andaiodane";
Match match = ipV4.Match(s);
if (match.Success)
{
Console.WriteLine("IP was {0}", match.Groups[1].Value);
}
问题是你在你的表达中使用
^
and\b
并且 2 都不是真的。^
匹配文本的开头。\b
匹配整个单词边界(如果 IP 周围没有字母、数字或下划线,这将起作用)。这在分隔符中进行了解释。
此外,您正在使用
.Groups[1]
,但是当正则表达式中有括号时使用它(这在The Captured Group中进行了解释)。如果您真的想提取由点分隔的任何 4 位数字组,您只需要删除这些分隔符。
只获得第一场比赛
演示:http: //ideone.com/NUfVeL
查找所有匹配项
演示:http: //ideone.com/dR00mt
匹配 IP 的替代方案
它可以写得更有界(尽管它不会改变效率):
或者您只能允许 0 到 255 之间的数字(以提取任何 IP)。
试试这个验证:
用第一种情况测试 federhico 的答案确实返回正常,但第二种没有,因为 ip 在“输入”文本中没有用空格分隔。也就是说,它在“naieofnai555aedae 192.168.1.1 andaiodane”时有效。马里亚诺的解释...
基于这个问题,我会告诉你尝试
任何一个