Rainer: RegEx

Hallo,

ich habe ca. 300 Strings zu überprüfen ob in diesen das @ 1x vorhanden ist?
Die Strings sind zwischen 100 - 400 Zeichen lang, haben teilweise kein bzw. mehrere @. Ich benötige die Strings mit nur einem @.
Am besten mit RegEx? Und wie geht das?

Gruß Rainer

  1. Hallo,

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

    mfg, Flo

    --
    sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|

    1. @ ↩︎

    1. 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. @ ↩︎

    2. Hi,

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

      Wenn schon, dann  /[2]*@[^@]*$/

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.

      1. @ ↩︎

      2. ^@ ↩︎

  2. ich habe ca. 300 Strings zu überprüfen ob in diesen das @ 1x vorhanden ist?
    Die Strings sind zwischen 100 - 400 Zeichen lang, haben teilweise kein bzw. mehrere @. Ich benötige die Strings mit nur einem @.
    Am besten mit RegEx? Und wie geht das?

    wieso am besten? Ein regülarer Ausdruck ist alles andere als performant, mit einem indexOf erreichst du dein Ziel wesentlich schneller.

    Struppi.

    1. Hi,

      Die Strings sind zwischen 100 - 400 Zeichen lang, haben teilweise kein bzw. mehrere @. Ich benötige die Strings mit nur einem @.
      Am besten mit RegEx? Und wie geht das?

      wieso am besten? Ein regülarer Ausdruck ist alles andere als performant, mit einem indexOf erreichst du dein Ziel wesentlich schneller.

      In diesem Falle kann man das clever mit lastIndexOf kombinieren - wenn die beiden gleich sind (und nicht gleich -1), dann enthält der String genau eins.

      var test = "blah blubb @ jodel, sülz quassel";  
      if(test.indexOf("@") != -1 && test.indexOf("@") == test.lastIndexOf("@")) {  
        alert(test+" enthält genau ein @");  
      }  
      else {  
        alert(test+" enthält kein oder mehr als ein @");  
      }
      

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.
  3. ich habe ca. 300 Strings zu überprüfen ob in diesen das @ 1x vorhanden ist?
    Die Strings sind zwischen 100 - 400 Zeichen lang, haben teilweise kein bzw. mehrere @. Ich benötige die Strings mit nur einem @.
    Am besten mit RegEx? Und wie geht das?

    Auch möglich wäre:
    var result = test.split(/@/);
    if( result.length == 2 ){ ... }

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische