C'est le modèle que vous devez faire:
(?!(?:00[:-]){5}00)((?:[0-9a-f]{2}[:-]){5}[0-9a-f]{2})
Modifier - une réponse à son @ Trev « comment pourriez-vous faire »
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";
}
}
sortie
'MATCH_ME'
'11:22:33:44:55:66'
'00:11:22:33:44:55'
--------------------
'MATCH_ME'
''
'00:11:22:33:44:55'
--------------------
'MATCH_ME'
'11:22:33:44:55:66'
''
--------------------
'MATCH_ME'
''
''
Pourquoi ne pouvez-vous le faire avec une seconde regex? –
Avez-vous besoin d'une regex pour comparer une valeur exacte? Que diriez-vous d'où regex.Match (strInput) && strInput! = "00: 00: 00: 00: 00: 00"? –
l'utilisation de conditionnels avec 2 regex est probablement moins intensive en calcul qu'une grosse regex qui devra être évaluée pour chaque cas – drapkin11