我正在尝试匹配一些ip名称(点分十进制或名称)。我需要匹配以下任何一项:
hostname-1-2-3
hostname-1-2-3.here.somewhere.com
hostname-1-2-3.here or
192.168.1.2
hostname-1-2.*
我有这个if语句:
if ($name !~ m/^[a-zA-Z0-9-\.]+$/ and
not $name =~ m/^[a-zA-Z0-9-]\.\*/ and
not $name =~ m/^[0-0]+\.[0-9]+\.[0-9]+\.[0-9]+$/)
{
print "inside if\n";
}
else {
print "inside else\n";
}
它现在打印在其他内部'对于前4个名字,以及'内部如果'为姓氏(该名称将在代码中扩展为多个主机名。
这是我想要的行为,我只是想知道我的正则表达式是否可以合并,因为前两个匹配非常相似。
答案 0 :(得分:1)
你在这里做了太多的否定......这样的阅读并不容易。
以下是您的解决方案:
^(?:
(?:\d+\.){3}\d+
|
[a-zA-Z][-a-zA-Z0-9.]*
)$
此正则表达式将匹配:
我认为这应该满足相同的要求。