我正在尝试将正则表达式与完全限定域名(fqdn)匹配,如下所示:
1.test02a-d.test.example.net
2.test02b-d.test.example.net
3.test03a.test.example.net
4.test03b.test.example.net
5.test04-d.test.example.net
6.test05.test.example.net
我试过这个正则表达式来获取fqdn的第一部分:
[^.]+
标准 在这里,我需要在第一部分的数字之后立即获取具有字母'a'或'b'的fqdn列表。如上例所示,1,2,3,4符合这一条件。 即, test02a,test02a-d,test 02b和test02b-d
根据上述标准,应忽略Fqdn 5和6。
如何修改正则表达式以匹配此条件?
注意:这应该在Mysql中用作REGEXP,因此一些直接的javascript正则表达式不起作用。该解决方案应适用于javascript和mysql。
答案 0 :(得分:1)
[a-z]+[0-9]+[ab](-d){0,1}(.test.example.net)
此正则表达式与您的前四个域名相匹配。 " [a-z] +"也可以用"(测试)"指定。 您可以在此网站上对其进行测试:http://regexr.com/
答案 1 :(得分:1)
MySQL版本:
^[^.]+[0-9]+[ab](-[^.]+)?[[:>:]]
JavaScript版本:
^[^.]+[0-9]+[ab](-[^.]+)?\b
regex101.com不支持MySQL风格regexp,因此我只提供JavaScript version。 test1bw.test.example.net被添加为测试字符串。
[[:>]]
特定于MySQL。对于JavaScript,应使用\b
代替[[:>]]
。 [[:>]]
是一个零长度断言,匹配一个单词的结尾(前面跟着但后面没有ASCII字母,数字或下划线的位置)。 \b
匹配作为单词开头或结尾的位置。
MySQL不支持任何速记字符类,因此应使用[[:digit:]]
或[0-9]
代替\d
答案 2 :(得分:0)
尝试
^[^.]+\d[ab][^.]*
它从一行(^
)的开头匹配任何不是点的字符(多个)。然后必须有一个数字,然后是a
或b
,可选地后跟另一个不是点的字符序列。
答案 3 :(得分:0)