Katharina Bergwacht: REgex zum Silbenzählen

Hallo,
ich versuche gerade eine REgex zu konstruieren mit der ich nur Wörter angezeigt bekomme, die eine bestimmte Silbenzahl haben. Warum wird bei dieser Regex auch das Wort "eine" oder "seine" gematcht?

\b([^aeiou ]*(ei|ie|ai|eu|au|aa|oo|[aeiou])[^aeiou ]*){3,3}\b

Eigentlichen sollten nur Wörter mit 3 Silben erkannt werden

Danke Katharina

  1. Hi,

    \b([^aeiou ]*(ei|ie|ai|eu|au|aa|oo|[aeiou])[^aeiou ]*){3,3}\b

    \b matcht an der Position vor eine

    [^aeiou ]* matcht die Leere vor eine
    (ei|ie|ai|eu|au|aa|oo|[aeiou]) matcht das e (mit dem letzten Teil der Alternative)
    [^aeiou ]* matcht die Leere zwischen e und i
    Die äußere Klammer hat jetzt einmal gematcht.

    [^aeiou ]* matcht die Leere zwischen e und i
    (ei|ie|ai|eu|au|aa|oo|[aeiou]) matcht das i (mit dem letzten Teil der Alternative)
    [^aeiou ]* matcht das n
    Die äußere Klammer hat jetzt zweimal gematcht.

    [^aeiou ]* matcht die Leere zwischen n und e
    (ei|ie|ai|eu|au|aa|oo|[aeiou]) matcht das e (mit dem letzten Teil der Alternative)
    [^aeiou ]* matcht die Leere nach eine
    Die äußere Klammer hat jetzt dreimal gematcht.
    {3,3}

    \b (das zweite) matcht die Position am Ende von eine.

    ==> der komplette Regex matcht das Wort "eine".

    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. Hi Andreas,
      danke für die Antwort. Hättest du eine Idee/Ansatz wie man diese Aufgabe angehen kann. D.h. mit dem Quantor soll die Anzahl der Silben definiert werden und als Ergebnis werden alle Wörter mit der entsprechend gewünschten Silbenzahl gematcht. Wie die Silben lauten ist erstmal egal.

      Danke Katha

      1. gudn tach!

        Hättest du eine Idee/Ansatz wie man diese Aufgabe angehen kann. D.h. mit dem Quantor soll die Anzahl der Silben definiert werden und als Ergebnis werden alle Wörter mit der entsprechend gewünschten Silbenzahl gematcht. Wie die Silben lauten ist erstmal egal.

        atomic grouping koennte dir helfen:
        in perl ginge das z.b. mit (?>diphtonge|vokale) (in perldoc perlre sind aber noch weitere moegliche notationen dafuer erlaeutert. vorsicht: die possessive quantifiers ++, *+, etc. wie in java funzen erst seit version 5.10)
        dadurch wird das backtracking verhindert, das verantwortlich ist fuer das ungewollte matchen von "e-i-n-e".

        ich vermute allerdings, dass ein regulaerer ausdruck sehr kompliziert/lang sein muesste, um tatsaechlich silben gescheit zu zaehlen; z.b. "skiersatz" (3 silben) vs. "zierfisch" (2 silben).

        prost
        seth

        1. Hi,

          ich vermute allerdings, dass ein regulaerer ausdruck sehr kompliziert/lang sein muesste, um tatsaechlich silben gescheit zu zaehlen; z.b. "skiersatz" (3 silben) vs. "zierfisch" (2 silben).

          Oder eines meiner Lieblingsworte: beinhalten - je nach Bedeutung ("Nichtloslassen eines unteren Gliedmaßes" vs. "zum Inhalt haben"/"enthalten") 3 oder 4 Silben.

          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. gudn tach!

            ich vermute allerdings, dass ein regulaerer ausdruck sehr kompliziert/lang sein muesste, um tatsaechlich silben gescheit zu zaehlen; z.b. "skiersatz" (3 silben) vs. "zierfisch" (2 silben).

            Oder eines meiner Lieblingsworte: beinhalten - je nach Bedeutung ("Nichtloslassen eines unteren Gliedmaßes" vs. "zum Inhalt haben"/"enthalten") 3 oder 4 Silben.

            jein. da du ja grossschreibung benutzt, ist das so nicht ganz richtig:
            "beinhalten" kleingeschrieben bedeutet nur zweites (im ersten fall wuerde es "Bein halten" heissen). grossgeschrieben kann es allerdings die substantivierung beider verben bedeuten, wobei i.a.r. aus dem kontext sofort hervorgeht, was gemeint ist.

            prost
            seth

            1. Hi,

              "beinhalten" kleingeschrieben bedeutet nur zweites (im ersten fall wuerde es "Bein halten" heissen).

              Ich mach doch nicht jede dahergelaufene Rechtschreibdeform [sic!] mit ...

              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.
            2. Hallo seth,

              Oder eines meiner Lieblingsworte: beinhalten - je nach Bedeutung ("Nichtloslassen eines unteren Gliedmaßes" vs. "zum Inhalt haben"/"enthalten") 3 oder 4 Silben.

              jein. [...]

              Unabhängig davon, ob das Beispiel nun tatsächlich richtig ist, oder nicht, es demonstriert eine wunderbare Sache: Man kann alleine auf Grund der Vokal- und Konsonantenstruktur NICHT bestimmen, wo eine Silbe anfängt und wo eine aufhört - dazu gehören schon ein paar mehr Informationen. Deswegen dürfte ein regulärer Ausdruck zum Silbenzählen nicht möglich sein (oder zumindest nicht praktikabel). Nicht umsonst verwendet z.B. [latex]\LaTeX[/latex] Tabellen, die etliche Kilobyte groß sind, um Silbentrennung korrekt zu realisieren.

              Viele Grüße,
              Christian