C# 正则表达式 匹配ip地址中地址是某个固定数值的 string src = "*>2172.16.12.0/24 10.16.12.1 " //匹配string src = "*>9172.165.125.0/24 10.16.12.1 " //不要匹配匹配src中的ip地址包含16或12并且是/结束的形式 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 string pattern=@"(?<=^|\D)1[26](?=/|\.\S*?/)"; string src = "*>2172.16.12.0/24 10.16.12.1 " //匹配string src = "*>9172.165.125.0/24 10.16.12.1 " //不要匹配匹配src中的ip地址包含16或12或34 等等,要以后可扩展的并且是/结束的形式和位置没关系的 string src = "*> 172.16.12.0/24 10.16.12.1 " //也要匹配string src = "*>r172.16.12.0/24 10.16.12.1 " //也要匹配开头是不一定的,结尾一定要是/ 并且整个要是一个ip的 (?:\*>|\.)1[26]\.(\d*\.)*\d/\d*\s*(\d+\.){3}\d+ 你这是想匹配啥啊?没看懂...意思是string src = "*>9172.165.125.0/24 10.16.12.1 " //不要匹配165.125.0这3个数只能为16或12或34?你说以/结束..那165.125.0/算不算呢? 165.125.0/不算的首先要是一个ip地址,这个ip地址前面可能不算空格r12.25.36.21/这种形式后面一定要是/结束并且这个ip地址里面某一个数字是16 或 21 或 34 165.125.0/不算的首先要是一个ip地址,这个ip地址前面可能不是空格r12.25.36.21/这种形式后面一定要是/结束并且这个ip地址里面某一个数字是16 或 21 或 34 protected void Page_Load(object sender, EventArgs e) { string strfortest = @"*>r172.12.12.12/24 10.16.12.1 *> 172.16.12.0/2 10.16.12.1 *> 172.16.12.0/ 10.16.12.1 *> 172.16.12.0/ 10.16.12.1 *> 172.1.1.666/2 10.16.12.1 *> 172.1.1.77/2 10.16.12.1 *> 172.16.12.8/2 10.16.12.1 *> 172.16.12.90/2 10.16.12.1 "; string[] strforcheck = { "16", "12", "34" }; MatchCollection mc = Regex.Matches(strfortest, @"\*\>[\w\W]+?\.(\d+)\.(\d+)\.(\d+)/\d+[^*]+"); List<string> list = new List<string>(); foreach (Match match in mc) { for (int i = 1; i <= match.Groups.Count; i++) { Boolean boolean = false; for (int j = 0; j < strforcheck.Length; j++) { if (match.Groups[i].Value.Equals(strforcheck[j])) { list.Add(match.Value); boolean = true; break; } } if (boolean) break; } } } 条件为 "*>任意字符或符号.数字.数字.数字/最后数字 XXXXXXX"数字部分为 strforcheck 中的任意一个..并且出现一次就满足条件..然后把结果放入List中了 string strfortest = @"*>r172.12.12.12/24 10.16.12.1 *> 172.16.12.0/2 10.16.12.1 *> 172.16.12.0/ 10.16.12.1 *> 172.16.12.0/ 10.16.12.1 *> 172.1.1.666/2 10.16.12.1 *> 172.1.1.77/2 10.16.12.1 *> 172.16.12.8/2 10.16.12.1 *> 172.16.12.90/2 10.16.12.1 "; var ary = strfortest.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(t => Regex.IsMatch(t, @"(?<=^|\D)1[26](?=/|\.\S*?/\d+)")).ToArray(); 首先谢谢你我自己研究了下写了一个,发现正则表达式 处理我这问题不行,太复杂了我这个只处理包含12的,把4中情况都列出来了,不知道有没有更好的办法(12\.(\d{1,3}\.){2}\d{1,3}/)|(\d{1,3}\.12\.\d{1,3}\.\d{1,3}/)|((\d{1,3}\.){2}12\.\d{1,3}/)|((\d{1,3}\.){3}12/) \d{3}\.12\.\d{1,3}\.\d{1,3}\/\d{1,3}~~~如果按照这种 你得匹配你的保留的N*2次~~~~一层一层的循环咯~~~\d{3}\.16\.\d{1,3}\.\d{1,3}\/\d{1,3}\d{3}\.34\.\d{1,3}\.\d{1,3}\/\d{1,3}\d{3}\.\d{1,3}\.12\.\d{1,3}\/\d{1,3}\d{3}\.\d{1,3}\.16\.\d{1,3}\/\d{1,3}无休止~~~~ Themida 2.1.2.0我要下载积分 大神啊,原谅我的无知吧!更新语句 where后面条件设成任意怎么着? C#的一個問題,高高手 GIS入门问题:VS2005(C#)如何搭建MapObjects开发环境 winform 父子窗体问题 此难题至今无人能解 小弟还有一问,需要高手指点 关于激活URL 初学者向大家请教个问题,C#中的索引器是方法还是属性? 用<%# DataBinder.Eval(Container.DataItem,"姓名")%>绑定的数据怎么判断?来人有分! 求教高手,.net和java 比,优势在哪里?? sql语句控制问题,急! axWindowsMediaPlayer1 为什么会出错?
string src = "*>2172.16.12.0/24 10.16.12.1 " //匹配
string src = "*>9172.165.125.0/24 10.16.12.1 " //不要匹配匹配src中的ip地址包含16或12或34 等等,要以后可扩展的
并且是/结束的形式
和位置没关系的
string src = "*> 172.16.12.0/24 10.16.12.1 " //也要匹配
string src = "*>r172.16.12.0/24 10.16.12.1 " //也要匹配开头是不一定的,结尾一定要是/ 并且整个要是一个ip的
不算的
首先要是一个ip地址,这个ip地址前面可能不算空格r12.25.36.21/这种形式
后面一定要是/结束
并且这个ip地址里面某一个数字是16 或 21 或 34
不算的
首先要是一个ip地址,这个ip地址前面可能不是空格r12.25.36.21/这种形式
后面一定要是/结束
并且这个ip地址里面某一个数字是16 或 21 或 34
{
string strfortest = @"*>r172.12.12.12/24 10.16.12.1
*> 172.16.12.0/2 10.16.12.1
*> 172.16.12.0/ 10.16.12.1
*> 172.16.12.0/ 10.16.12.1
*> 172.1.1.666/2 10.16.12.1
*> 172.1.1.77/2 10.16.12.1
*> 172.16.12.8/2 10.16.12.1
*> 172.16.12.90/2 10.16.12.1 ";
string[] strforcheck = { "16", "12", "34" };
MatchCollection mc = Regex.Matches(strfortest, @"\*\>[\w\W]+?\.(\d+)\.(\d+)\.(\d+)/\d+[^*]+");
List<string> list = new List<string>();
foreach (Match match in mc)
{
for (int i = 1; i <= match.Groups.Count; i++)
{
Boolean boolean = false;
for (int j = 0; j < strforcheck.Length; j++)
{
if (match.Groups[i].Value.Equals(strforcheck[j]))
{
list.Add(match.Value);
boolean = true;
break;
}
}
if (boolean) break;
}
}
}
*> 172.16.12.0/2 10.16.12.1
*> 172.16.12.0/ 10.16.12.1
*> 172.16.12.0/ 10.16.12.1
*> 172.1.1.666/2 10.16.12.1
*> 172.1.1.77/2 10.16.12.1
*> 172.16.12.8/2 10.16.12.1
*> 172.16.12.90/2 10.16.12.1 ";
var ary = strfortest.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(t =>
Regex.IsMatch(t, @"(?<=^|\D)1[26](?=/|\.\S*?/\d+)")).ToArray();
我自己研究了下写了一个,发现正则表达式 处理我这问题不行,太复杂了
我这个只处理包含12的,把4中情况都列出来了,不知道有没有更好的办法
(12\.(\d{1,3}\.){2}\d{1,3}/)|
(\d{1,3}\.12\.\d{1,3}\.\d{1,3}/)|
((\d{1,3}\.){2}12\.\d{1,3}/)|
((\d{1,3}\.){3}12/)
\d{3}\.34\.\d{1,3}\.\d{1,3}\/\d{1,3}
\d{3}\.\d{1,3}\.12\.\d{1,3}\/\d{1,3}
\d{3}\.\d{1,3}\.16\.\d{1,3}\/\d{1,3}无休止~~~~