2016-08-24 111 views
0

我想完全合格的域名(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,测试02B和test02b-d

FQDN 5和6应被忽略按照上述标准。

如何修改匹配此条件的正则表达式?

注:这应该在MySQL作为REGEXP,因此一些直接的JavaScript正则表达式没有工作。该解决方案应适用于JavaScript和MySQL。

+0

我需要对MySQL –

+0

作品的想法对我来说:https://regex101.com/r/hL6aD0/ 1 –

+0

@TomDoodler它匹配整个字符串的第一部分。我需要按照标准过滤掉fqdn。只有1,2,3,4应该匹配。 –

回答

1

MySQL版本:

^[^.]+[0-9]+[ab](-[^.]+)?[[:>:]] 

JavaScript版本:

^[^.]+[0-9]+[ab](-[^.]+)?\b 

regex101.com不支持MySQL的味道正则表达式,所以我只给JavaScript version。 test1bw.test.example.net作为测试字符串添加。

[[:>]]是特定于MySQL的。对于JavaScript,应该使用\b而不是[[:>]][[:>]]是一个零长度断言,匹配一个单词的结尾(位置在ASCII字母,数字或下划线之后,但后面没有)。 \b匹配一个单词开头或结尾的位置。

MySQL不支持任何速记字符类,所以[[:digit:]][0-9]应改为使用的\d

+0

谢谢。您的解决方案与此“test1bw.test.example.net”匹配fqdn。数字后应该只有一个字母。那个字母表之后可以有连字符。这应该不匹配 –

+0

@GaneshBabu固定。我建议你在你的问题中添加“test1bw.test.example.net”或其他测试字符串,以使你的标准更清晰。 – ltux

+0

谢谢。它工作正常 –

0

尝试

^[^.]+\d[ab][^.]* 

它会匹配,从线(^)的任何字符(不止一个)不是一个点的开始。然后必须有一个数字后跟一个a或一个b,可选地后跟另一个不是点的字符序列。

See it here at regex101

1
[a-z]+[0-9]+[ab](-d){0,1}(.test.example.net) 

这个正则表达式匹配你的前四个域名。在“[A-Z] +”也可以用“(测试)”规定 您可以在这个网站测试:http://regexr.com/

+0

谢谢..它现在可以工作。如何忽略域名部分的其余部分。即,而不是test.example.net,可能有任何名称 –

+0

你可以用你的域名替换正则表达式中的“.test.example.net”,否则你可以使用'[az] + [0- 9] + [ab]( - d){0,1}(。)+' – andii1997

+0

谢谢..它工作正常。但是我对这种形式的例子“test01.test90a-d.example.net”进行了匹配。根据我的情况,我应该只匹配域名的第一部分 –

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

workes我...试试here全域相匹配。

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

仅匹配域的第一部分。

+0

谢谢。但它不适用于这种形式的示例“test01.test90a-d.example.net”。在第一个点之前我需要一个部分的匹配。 –

+0

我会尝试修复它 – Schnicker

+0

(?<!。)[a-zA-Z] + [\ d] + [a-zA-Z] + [ - \ w] *如下所示:https:/ /regex101.com/r/pF3mG5/4 – Schnicker