Johnny B.: Frage zu regulärem Ausdruck

Hallo SelfHTML-Forum,

ich habe folgenden regulären Ausdruck:

push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);

$suchtext = "Raum Berlin"

Er findet "Berlin".

Ist allerdings $suchtext = "Raum Region Berlin",

findet er nur "Region".

Erwartet hätte ich "Region Berlin" als Ergebnis.

Wieso findet er "Berlin" dann nicht mehr?

Merci für's Augen-Öffnen...

  1. Wieso findet er "Berlin" dann nicht mehr?

    Weil er "Raum" zuerst findet dann einen whitespace und dann "Region". Und dieses Region befriedigt ihn vollkommen.

    Wenn du mit der Folge Raum Region Stadt rechnest, dann musst du schon einen Quantifier beigeben:

    /\b(?:(?:region|raum|stadt)\s+)+([A-Za-z]+?)\b/gmi

    PS /s ist unnötig denn du hast keinen "." als Zeichengruppe

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Wenn du mit der Folge Raum Region Stadt rechnest, dann musst du schon einen Quantifier beigeben:

      /\b(?:(?:region|raum|stadt)\s+)+([A-Za-z]+?)\b/gmi

      --- raffiniert!

      Danke schön, Beat!

  2. Hi,

    push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);

    $suchtext = "Raum Berlin"

    Er findet "Berlin".

    und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      »» push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
      »»
      »» $suchtext = "Raum Berlin"
      »»
      »» Er findet "Berlin".

      und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?

      Raum VS: Kuckuck-Uhren
      N: Lebkuchen

      SCNR ;-)
      Horst

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
      1. Hi,

        »» »» push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
        »» »» $suchtext = "Raum Berlin"
        »» »» Er findet "Berlin".
        »»
        »» und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?

        Raum VS: Kuckuck-Uhren
        N: Lebkuchen

        ich liebe Regular Expressions ;-)

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. »» »» push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
          »» »» $suchtext = "Raum Berlin"
          »» »» Er findet "Berlin".
          »»
          »» und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?

          Raum VS: Kuckuck-Uhren
          N: Lebkuchen

          ich liebe Regular Expressions ;-)

          Tja wenn du alles matchen willst kannst du nichts matchen.
          Hinter jeder RE steht eine proprietäre RFC...

          Raum UNICODE_ZEICHEN_FÜR_ÖFFENTLICHES_KLO

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
    2. Hi,

      »» push( @array, $suchtext =~ /\b(?:region|raum)\s+([A-Za-z]+?)\b/gsmi);
      »» $suchtext = "Raum Berlin"
      »» Er findet "Berlin".
      und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?

      oder "Raum Bad Tölz"

      (nein, da wird nicht der "Bulle von Tölz" gefunden)

      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.
    3. und was findet er bei "Raum Villingen-Schwenningen" oder "Raum Nürnberg"?

      --- "Villingen" und "Nuernberg", da Umlaute und Sonderzeichen in $suchtext vorher bereits bereinigt worden sind.

      "Villingen" kommt manuell in die Liste der Orts-Vor-Namen, nach denen noch ein zweites Wort folgt, wie z.B. auch "Bad" oder "Gross" oder "Timmendorfer". Diese Doppel-Ortsnamen werden dann später mit dem in $suchtext folgendem Wort ergänzt.  :-)

      Aber besten Dank für den Hinweis!
      RegEx-Stolperfallen-Alarm...

      1. @@Johnny B.:

        --- "Villingen" und "Nuernberg", da Umlaute und Sonderzeichen in $suchtext vorher bereits bereinigt worden sind.

        ?? Was heißt „bereinigt“?

        Die deutsche Sprache verwendet nun mal Umlaute und ß. Es ist wohl töricht, diese durch ae, oe, ue, ss zu ersetzen.

        Lass die Daten in Ruhe und bring deiner Software bei, diese richtig zu verarbeiten!

        Live long and prosper,
        Gunnar

        --
        Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)