Mein Text-String sieht wie folgt aus extrahieren:regex Mit Benutzernamen von E-Mail-Adresse
[email protected] (John Doe)
ich vor dem @ und nichts anderes nur die Rolle bekommen müssen. Der Text stammt von einem einfachen XML-Objekt, wenn es darauf ankommt.
Der Code Ich habe sieht wie folgt aus:
$authorpre = $key->{"author"};
$re1 = '((?:[a-z][a-z]+))';
if ($c = preg_match_all ("/".$re1."/is", $authorpre, $matches))
{
$author = $matches[1][0];
}
Manchmal könnte der Benutzername haben Zahlen oder einen Unterstrich vor dem @ -Zeichen, das ist, wo die regex hält es scheint.
Ihr regexp hat eine äußere Erfassungsgruppe '()' und eine innere Nicht-Erfassung Gruppe '(:)'. Die innere nicht einfangende Gruppe ist möglicherweise unnötig, da Sie erfassen möchten, was sich darin befindet. Das '[a-z]' bedeutet, einen Kleinbuchstaben zu erfassen. Das '[a-z] +' bedeutet, dass 1 oder mehr Kleinbuchstaben erfasst werden. Effektiv bedeutet Ihr Ausdruck, dass Sie alles erfassen, was 2 oder mehr Kleinbuchstaben lang ist. Wenn Sie ein "^" ganz vorne in Ihren Ausdruck einfügen, wird sichergestellt, dass die Übereinstimmung nur vom Anfang des Texts aus erfolgt. –
Wird nicht sehr viel Spaß machen, fürchte ich. Einige Beispiel-Strings, die Sie vielleicht testen möchten: "" John Doe "@ example.com (John Doe)', '"(>'.')>"@example.com (John Doe)', 'foo @ [192.168. 2.1] (John Doe) ', '^.^@example.com (John Doe)', '" [email protected]@c"@example.com (John Doe) "'. Ja, das sind alles gültige E-Mails Adressen :-) – Joey
@Johannes: '" [email protected]@c"@example.com (John Doe) 'ist wirklich erlaubt? Das macht die Dinge wirklich kompliziert ... – Welbog