我试着用这个源代码提取wan_ip的值(IP地址):怎么回事?!我确定RegEx模式是正确的.
String input = @"var product_pic_fn=;var firmware_ver='20.02.024';var wan_ip='92.75.120.206';if (parent.location.href != window.location.href)";
Regex ip = new Regex(@"[\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
string[] result = ip.Split(input);
foreach (string bla in result)
{
Console.WriteLine(bla);
}
Console.Read();
Run Code Online (Sandbox Code Playgroud)
Bar*_*ers 45
本[
不应该是你的模式的开始.此外,您可能想要使用Matches(...)
.
尝试:
String input = @"var product_pic_fn=;var firmware_ver='20.02.024';var wan_ip='92.75.120.206';if (parent.location.href != window.location.href)";
Regex ip = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
MatchCollection result = ip.Matches(input);
Console.WriteLine(result[0]);
Run Code Online (Sandbox Code Playgroud)
JPB*_*anc 37
很老的帖子,您应该使用已接受的解决方案,但考虑使用正确的RegEx进行IPV4地址:
((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)
如果您想在使用之后或之前避免使用特殊字符:
^((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)
SwD*_*n81 15
试试这个:
Match match = Regex.Match(input, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
if (match.Success)
{
Console.WriteLine(match.Value);
}
Run Code Online (Sandbox Code Playgroud)
我知道这篇文章并不新鲜,但是,我已经尝试了几个提议的解决方案,但由于 Justin Jones 提供的链接,我发现它们的效果都不如我发现的那样好。他们有很多 IP 地址,但这是列表的顶部,并且使用 LinqPad(我喜欢 LinqPad)进行的大多数测试都非常有效。我建议使用这个而不是之前提供的任何表达式:
^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$
Run Code Online (Sandbox Code Playgroud)
使用以下命令在 LinqPad 中试一试:
// \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b 355.168.0.1 = 355.168.0.1 (Not Correct)
// ((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]?) 355.168.0.1 = 55.168.0.1 (Not correct)
// \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 355.168.0.1 = 355.168.0.1 (Not Correct)
// ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ 355.168.0.1 = 355.168.0.1 (Not Correct)
// ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 355.168.0.1 = 355.168.0.1 (Not Correct)
// ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$ 355.168.0.1 = No Match (Correct)
Match match = Regex.Match("355.168.0.1", @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$");
if (match.Success) {
Console.WriteLine(match.Value);
}
else {
Console.WriteLine("No match.");
}
Run Code Online (Sandbox Code Playgroud)
使用新的 RegEx,这是无效的,这是正确的:355.168.0.1 = 无匹配,如评论中所述,这是正确的。
我欢迎对此进行任何调整,因为我正在开发一个使用该表达式的工具,并且一直在寻找更好的方法来做到这一点。
更新:我创建了一个 .NET Fiddle 项目来提供此表达式的工作示例以及测试各种值的 IP 地址列表。如果您发现表达式失败的情况,请随意修改它并尝试各种值来练习此表达式并提供任何输入。https://dotnetfiddle.net/JoBXdI
更新 2:最好参考这篇文章:另一个相关问题。
谢谢,我希望这会有所帮助!
如果您只想检查正确的IP,请使用IPAddress.TryParse
using System.Net;
bool isIP(string host)
{
IPAddress ip;
return IPAddress.TryParse(host, out ip);
}
Run Code Online (Sandbox Code Playgroud)