我尝试使用此源代码提取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();
答案 0 :(得分:44)
[
不应该在您的模式的开头。此外,您可能希望使用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]);
答案 1 :(得分:32)
很老的帖子,您应该使用已接受的解决方案,但考虑使用正确的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]?)
如果您想在使用之后或之前避免使用特殊字符:
^((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]?)$
答案 2 :(得分:14)
试试这个:
Match match = Regex.Match(input, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}");
if (match.Success)
{
Console.WriteLine(match.Value);
}
答案 3 :(得分:5)
如果您发现自己正在寻找特定的正则表达式,http://regexlib.com/会有很多库格式的RegEx。
答案 4 :(得分:3)
Regex.IsMatch(input, @"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$")
答案 5 :(得分:2)
避免使用/b
- 它允许在IP之前或之后的字符
例如...198.192.168.12...
有效。
如果您可以将输入拆分为可隔离IP地址的块,请使用^
和$
。
Regex regexIP = new Regex(@"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$");
if (regexIP.Match(textBoxIP.Text).Success){
String myIP = textBoxIP.Text;
}
上面的注意不会验证数字,如172所示。 316 .254.1为真。这只会检查正确的格式。
更新:要验证格式和价值,您可以使用
Regex regexIP = new Regex(@"^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$");
if (regexIP.Match(textBoxIP.Text).Success){
String myIP = textBoxIP.Text;
}
(注意每个数值使用([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])
)
信用:https://stackoverflow.com/a/10682785/4480932
答案 6 :(得分:2)
我知道这篇文章不是新的,但是,我已经尝试了几个提议的解决方案,但是由于贾斯汀琼斯提供的链接,它们都没有像我找到的那样有效。他们有很多IP地址,但这是列表的顶部,使用LinqPad(I LOVE LinqPad),我投入的大部分测试工作得非常好。我建议使用这个而不是之前提供的任何表达式:
Stringres
使用以下内容在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])$
使用新的RegEx,这是无效的,这是正确的:355.168.0.1 =没有正确的匹配,如评论中所述。
我欢迎任何调整,因为我正在研究一种利用表达式的工具,并且一直在寻找更好的方法。
更新:我创建了一个.NET Fiddle项目,以提供此表达式的工作示例以及测试各种值的IP地址列表。如果您发现表达式失败的情况,请随意修改它并尝试使用各种值来练习此表达式并提供任何输入。 https://dotnetfiddle.net/JoBXdI
更新2 :更好的是参考这篇文章:Another related question.
谢谢,我希望这有帮助!
答案 7 :(得分:2)
如果您只想检查正确的IP,请使用IPAddress.TryParse
using System.Net;
bool isIP(string host)
{
IPAddress ip;
return IPAddress.TryParse(host, out ip);
}
答案 8 :(得分:0)
我认为你需要摆脱[ - 这是一个流浪角色还是什么?
正则表达式(@“的 [强> \ B \ d {1,3}。\ d {1,3}。\ d {1,3}。\ d {1,3} \ b “)
答案 9 :(得分:0)
你的正则表达式模式的开头似乎有一个无关的 [。
答案 10 :(得分:0)
正则表达式(@" \ A \ d {1,3}。\ d {1,3}。\ d {1,3}。\ d {1,3} \ z")试试用这个
答案 11 :(得分:0)
我从UrlAttribute.cs采用了这种模式。在DataAnnotations命名空间。正如您所看到的,我只从源头中获取了原始模式的一部分。
Regex.IsMatch(input, @"^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-
9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-
9]\d|1\d\d|2[0-4]\d|25[0-5])$");
答案 12 :(得分:0)
(\d{1,3}\.){3}(\d{1,3})[^\d\.]
检查一下。它应该完美地运作
答案 13 :(得分:0)
另一个变体,具体取决于您要如何处理填充(例如,a.b.c.00被视为无效格式):
^(?25 [0-5] | 2 [0-4] [0-9] | [1]?[1-9] [1-9] | [1-9] {1} | 0 {1})(。(?25 [0-5] | 2 [0-4] [0-9] | [1]?[1-9] [1-9] | [1-9] {1} | 0 {1})){3} $