C# 正则表达式-匹配除00:00:00:00:00以外的所有MAC地址
我有一个包含多个MAC地址的字符串。如何匹配除00:00:00:00:00以外的所有Mac 我用于匹配MAC的正则表达式:C# 正则表达式-匹配除00:00:00:00:00以外的所有MAC地址,c#,regex,C#,Regex,我有一个包含多个MAC地址的字符串。如何匹配除00:00:00:00:00以外的所有Mac 我用于匹配MAC的正则表达式: ((?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}) 坦率地说,我建议分两部分来做。首先使用正则表达式获取所有单独的地址,然后简单地从列表中删除任何零地址。这是 很可能计算成本较低,并且 比大量的正则表达式更容易阅读和维护 坦率地说,我建议分两部分来做。首先使用正则表达式获取所有单独的地址,然后简单地从列表中删除任何零地址。这是 很可能计算成本较低,并且
((?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2})
坦率地说,我建议分两部分来做。首先使用正则表达式获取所有单独的地址,然后简单地从列表中删除任何零地址。这是
坦率地说,我建议分两部分来做。首先使用正则表达式获取所有单独的地址,然后简单地从列表中删除任何零地址。这是
这是您需要执行的模式:
(?!(?:00[:-]){5}00((?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2})
编辑-回答@trev的“你怎么能这样做?”
输出
“匹配我”
'11:22:33:44:55:66'
'00:11:22:33:44:55'
--------------
“匹配我”
'
'00:11:22:33:44:55'
--------------
“匹配我”
'11:22:33:44:55:66'
'
--------------
“匹配我”
'
'
这是您需要执行的模式:
(?!(?:00[:-]){5}00((?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2})
编辑-回答@trev的“你怎么能这样做?”
输出
“匹配我”
'11:22:33:44:55:66'
'00:11:22:33:44:55'
--------------
“匹配我”
'
'00:11:22:33:44:55'
--------------
“匹配我”
'11:22:33:44:55:66'
'
--------------
“匹配我”
'
'
为什么不能用第二个正则表达式来做呢?需要一个正则表达式来比较精确的值吗?regex.Match(strInput)&strInput!=“00:00:00:00:00:00”?将条件语句与两个正则表达式一起使用可能比为每个正则表达式计算一个大正则表达式所需的计算量要少case@john我考虑过这个问题(在我的例子中,它看起来更像是foreach(matches.Groups中的Group){if(Group.Value!=“00:00:00:00”)DoWork();}
因为我在应用程序设置中有我的正则表达式,所以我希望只更改它,而不是修改代码和重新部署。为什么不能用第二个正则表达式来执行此操作?是否需要正则表达式来比较精确的值?regex.Match(strInput)和&strInput!=“00:00:00:00”的位置如何?使用带有2个正则表达式的条件可能比一个需要对每个正则表达式求值的大型正则表达式计算量小case@john我考虑过这个问题(在我的例子中,它看起来更像是foreach(matches.Groups中的Group){if(Group.Value!=“00:00:00:00”)DoWork();}
因为我的正则表达式在AppSettings中,所以我希望只是更改它,而不是修改代码和重新部署。很好!现在我如何使用它来返回“MATCH_ME”和这两个mac(请记住,其中任何一个都可以是零mac)[代码>码>码>码>码>码>匹配你我mac1=11:11:22:33:44:55:55:55:66 mac2=00:11:11:11:22:22:22:22:33:44:44:44:55:55:55:55:55:55:55:55:22:22:22:22:33:44:44:44:55代码>Trev这只是编程,留下作为一个作为一个作为一个练习。Trev这是编程,这只是编程,这只是编程,剩下作为一作为一个作为一作为一个作为一个作为一个作为一个练习。这是对如何<代码>这是答案。这是答案。这是对以下以下以下以下以下的答案。这是对以下以下以下以下的答案的答案。这是对<代码>(代码>(码>(码>(码>匹配(码>匹配你)的(匹配你)的(匹配你(匹配你)的(匹配你)的(匹配你)的}[0-9a-f]{2}|)但我会将其格式化,使其可读性与上面的示例相同。很好!现在我如何使用它来返回“MATCH_ME”和这两个mac(请记住,其中一个可能是零mac)[代码>码>码>码>码>码>匹配你我mac1=11:11:22:33:44:55:55:55:66 mac2=00:11:11:11:22:22:22:22:33:44:44:44:55:55:55:55:55:55:55:55:22:22:22:22:33:44:44:44:55代码>Trev这只是编程,留下作为一个作为一个作为一个练习。Trev这是编程,这只是编程,这只是编程,剩下作为一作为一个作为一作为一个作为一个作为一个作为一个练习。这是对如何<代码>这是答案。这是答案。这是对以下以下以下以下以下的答案。这是对以下以下以下以下的答案的答案。这是对<代码>(代码>(码>(码>(码>匹配(码>匹配你)的(匹配你)的(匹配你(匹配你)的(匹配你)的(匹配你)的}[0-9a-f]{2}|)但是我会像上面的例子一样格式化它以使其可读。或者你可以有一个两部分的正则表达式。第一部分只匹配零MAC。然后你可以有两个捕获。如果MAC都为零,第一个捕获将包含内容。如果不都为零,第一个捕获将为空,第二个捕获将包含内容。或者你可以有一个由两部分组成的正则表达式。第一部分只匹配零个MAC。然后可以有两个捕获。如果MAC都为零,则第一个捕获将包含内容。如果不都为零,则第一个捕获将为空,第二个捕获将包含内容。
use strict; use warnings;
my @samps = (
'MATCH_ME mac1=11:22:33:44:55:66 mac2=00:11:22:33:44:55',
'MATCH_ME mac1=00:00:00:00:00:00 mac2=00:11:22:33:44:55',
'MATCH_ME mac1=11:22:33:44:55:66 mac2=00:00:00:00:00:00',
'MATCH_ME mac1=00:00:00:00:00:00 mac2=00:00:00:00:00:00',
);
for (@samps) {
if ( /(MATCH_ME)\s*
mac1=
( (?!(?:00[:-]){5}00)
(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}
|
)
.*?
mac2=
( (?!(?:00[:-]){5}00)
(?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2}
|
)
/x )
{
print "'$1'\n";
print "'$2'\n";
print "'$3'\n",'-'x20,"\n";
}
}