2016-08-24 28 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