2016-08-24 4 views
0

ich Regex für den Fully Qualified Domain Name (FQDN) wie folgt anzupassen versuche:Regex ersten Teil des Domain-Namens für:

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 

Ich habe versucht, diese Regex den ersten Teil des fqdn zu bekommen:

[^.]+ 

Kriterien: Hier muß ich die Liste des fqdn erhalten, die Alphabete ‚a‘ oder ‚b‘ unmittelbar nach der Zahl im ersten Teil hat. Wie im obigen Beispiel gezeigt, stimmt 1,2,3,4 mit dieser Bedingung überein. d.h. test02a, test02a-d, 02b-Test und test02b-d

Fqdn 5 und 6 soll nach den oben genannten Kriterien ignoriert.

Wie ändern Regex für die Übereinstimmung mit diesem Kriterium?

Hinweis: Dies sollte als REGEXP in Mysql verwendet werden und daher einige direkte Javascript Regexes nicht funktioniert. Die Lösung sollte sowohl für JavaScript als auch für MySQL gelten.

+0

Ich brauche für Mysql –

+0

Works für mich auf eine Idee verwendet werden: https://regex101.com/r/hL6aD0/ 1 –

+0

@TomDoodler Es entspricht dem gesamten ersten Teil der Zeichenfolge. Ich muss die FQDN nach den Kriterien herausfiltern. Nur 1,2,3,4 sollte übereinstimmen. –

Antwort

1

MySQL Version:

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

JavaScript-Version:

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

regex101.com nicht unterstützt Geschmack regexp MySQL, so dass ich nur die JavaScript version geben. test1bw.test.example.net wird als Testzeichenfolge hinzugefügt.

[[:>]] ist spezifisch für MySQL. Für JavaScript sollte \b anstelle von [[:>]] verwendet werden. [[:>]] ist eine Zero-Length Assertion, die am Ende eines Wortes übereinstimmt (Position, der ein ASCII-Buchstabe, eine Ziffer oder ein Unterstrich vorausgeht, aber nicht dahinter steht). \b passt an einer Position, die der Anfang oder das Ende eines Worts ist.

MySQL keine Stenografie Zeichenklassen unterstützen, so [[:digit:]] oder [0-9] sollte statt \d

+0

Danke. Ihre Lösung entspricht fqdn wie dieser "test1bw.test.example.net". Nach der Nummer sollte nur ein Alphabet sein. Nach diesem Alphabet kann ein Bindestrich stehen. Dies sollte nicht übereinstimmen –

+0

@GaneshBabu Fixed. Ich schlage vor, dass Sie "test1bw.test.example.net" oder andere Test-Strings zu Ihrer Frage hinzufügen, um Ihre Kriterien klarer zu machen. – ltux

+0

Danke. Es funktioniert gut –

0

Versuchen

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

Es wird von Anfang an von einer Linie (^) alle Zeichen (mehr als ein) nicht zu sein mit einem Punkt überein. Dann muss es eine Ziffer geben, gefolgt von a oder b, gefolgt von einer weiteren Zeichenfolge, die kein Punkt ist.

See it here at regex101.

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

Dieser Regex entspricht Ihren ersten vier Domainnamen. Die "[a-z] +" auch mit "(Test)" angegeben werden könnte Sie können es auf dieser Website testen: http://regexr.com/

+0

Danke .. Es funktioniert jetzt. So ignorieren Sie den Rest des Domain-Teils. dh, anstelle von test.example.net kann es irgendwelche Namen geben. –

+0

Sie können das ".test.example.net" in der Regex durch Ihre Domain ersetzen, ansonsten können Sie einfach '[az] + [0- 9] + [ab] (- d) {0,1} (.) + ' – andii1997

+0

Danke .. Es funktioniert gut. Aber ich werde für Beispiele dieser Form "test01.test90a-d.example.net" gefunden. Laut meinem Fall sollte ich nur den ersten Teil des Domain-Namens anpassen: –

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

workes für mich ... versuchen Sie es here die ganze Domäne übereinstimmt.

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

stimmt nur mit dem ersten Teil der Domäne überein.

+0

Danke. Aber es hat für Beispiele dieser Form "test01.test90a-d.example.net" nicht funktioniert. Ich brauche eine Übereinstimmung für einen Teil vor dem ersten Punkt. –

+0

Ich werde versuchen, es zu beheben – Schnicker

+0

was ist mit (? Schnicker