2016-08-18 1 views
4

ich regex lerne und habe Probleme bekommen google von E-Mail-AdresseRegex erhalten Domain-Namen von E-Mail

String

[email protected] 

Ich will nur Google bekommen, google.com nicht

Regex :

[^@].+(?=\.) 

Ergebnis: https://regex101.com/r/wA5eX5/1

Von meinem Verständnis. Es ignoriert @ Suche danach eine Zeichenfolge bis . (Punkt) mit (?=\.)

Was habe ich falsch gemacht? .

+0

Die '[^ @]' ist eine nicht '@'. Das '. +' Ein oder mehrere Zeichen (mit Ausnahme der neuen Zeile). Versuchen Sie https://regex101.com/r/wA5eX5/2 – chris85

+2

Warum sollte jemand das Angebot ablehnen? –

+0

Meh, mach dir keine Sorgen um Downvotes, du wirst manchmal ein paar aus heiterem Himmel bekommen. – castis

Antwort

2

[^@] bedeutet „Spiel ein Symbol, das nicht ein @ Zeichen ist, dass ist nicht das, was Sie suchen - Einsatz Lookbehind (?<[email protected]) für @ und Ihren (?=\.) Look-Ahead für \. Servernamen in der Mitte zu extrahieren:

(?<[email protected])[^.]+(?=\.) 

Der mittlere Abschnitt [^.]+ bedeutet "ein oder mehr nicht-Punkt-Zeichen".

Demo.

+0

Danke. Es scheint gut zu funktionieren, wenn Sie '(? = \.)' –

+0

@ I'll-Be-Back nehmen Das ist richtig - '[^.]' Kümmert sich darum. Wenn eine Adresse jedoch so aussieht wie 'a @ google', würde Ausdruck ohne '(? = \.)' Look-Ahead trotzdem mit 'google' übereinstimmen, während Ausdruck mit dem Look-ahead diese Zeichenfolge als ungültig zurückweisen würde. – dasblinkenlight

+0

Sehr guter Punkt. Vielen Dank! –

1

Dies sollte die Regex sein:

(?<[email protected])[^.]+ 

(?<[email protected]) - stellt die Suche direkt nach dem @ [^.]+ - nehmen alle die Zeichen, die nicht Punkt sind (stoppt auf Punkt)

So extrahiert es google von der E-Mail-Adresse.

1

Vielleicht nicht unbedingt eine "volle Regex-Antwort", sondern flexibler (falls der Teil vor dem @ nicht "erster" ist).letzter ") wäre mit Schnitt:

cut -d @ -f 2 | cut -d . -f 1 

Der erste Schnitt wird das Teil nach dem @ und die zweiten isolieren wird für weitere Arten von E-Mail-Muster Dies funktioniert auch, was Sie wollen: xxxx @ server.. com/xxx.yyy.zzz @ server.com und so weiter ...