正则表达式匹配域名的第一部分

时间:2016-08-24 08:08:51

标签: javascript mysql regex

我正在尝试将正则表达式与完全限定域名(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。

4 个答案:

答案 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][^.]*

它从一行(^)的开头匹配任何不是点的字符(多个)。然后必须有一个数字,然后是ab,可选地后跟另一个不是点的字符序列。

See it here at regex101

答案 3 :(得分:0)

[a-zA-Z]+[\d]+[a-zA-Z]+.*

为我工作...尝试here匹配整个域。

[a-zA-Z]+[\d]+[a-zA-Z]+[-\w]*

仅匹配域的第一部分。