Patrick Andrieu: RegEx

Beitrag lesen

Hallo levu!

Auch wenn die regex-losen Lösungen, wie von Struppi und Beat vorzuziehen sind, hat's mich mal gejuckt...

Der Regexp, der mir spontan einfallen würde, wäre /[1]*@[^@]*$/

Wenn Du ihn auch »spontan« getestet hättest, hättest Du festgestellt, dass der Regex nicht matcht. Hier mit Perl:

my @strings = ();  
$strings[0] = 'Isch abe gar kein Arobas';  
$strings[1] = 'Ich enthalte genau ein @-Zeichen';  
$strings[2] = 'Ich enthalte hier ein @ und hier noch ein @-Zeichen';  
$strings[3] = 'Ich enthalte ein doppeltes @@ irgendwo in der Mitte';  
  
for (@strings) {  
  print 'Regex 1: @ gefunden in: ', $_, "\n" if /^[@]*@[^@]*$/;  
}

Ausgabe: Gar keine

Dagegen:

my @strings = ();  
$strings[0] = 'Isch abe gar kein Arobas';  
$strings[1] = 'Ich enthalte genau ein @-Zeichen';  
$strings[2] = 'Ich enthalte hier ein @ und hier noch ein @-Zeichen';  
$strings[3] = 'Ich enthalte ein doppeltes @@ irgendwo in der Mitte';  
  
for (@strings) {  
  print 'Regex 2: @ gefunden in: ', $_, "\n" if /@/ and !/(@).*?\1/;  
}  

Ausgabe:
Regex 2: @ gefunden in: Ich enthalte genau ein @-Zeichen

Allerdings gelingt es mir nicht, einen einzigen Ausdruck aus »if match and not match« zu machen. Da hoffe ich auf die Lösung eines Regexperten (wow, geile Wortkonstruktion, nicht wahr? *g*).

print 'Regex 3: @ gefunden in: ', $_, "\n" if /(?<!@)@(?!@).*?(?!@)/;

Obiges ignoriert zwar den String mit doppelten @, matcht aber beim dritten String ($strings[2])...

Viele Grüße aus Frankfurt/Main,
Patrick

--
_ - jenseits vom delirium - _

   Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?

  1. @ ↩︎