regex-Pattern - Steh auf'm Schlauch (preg_match_all)

para_noid

hirnrissig
Moin,

Ich habe hier ein Array welches diverse Stichpunkte beinhaltet. Nun möchte ich daraus ein Array mit allen vorhanden Substantiven bekommen, also alle Wörter mit einem Großbuchstaben beginnend und mindestens 4 Zeichen lang.
Reguläre Ausdrücke waren noch nie meine Stärke, aber meistens hab ich dann trotzdem ne Lösung gefunden. Heute nicht:

PHP:
$pattern = '/^([A-Z]+[A-z]{3,})*$/';
while(list($key, $val) = each($keywords)){
  if($val == strip_tags($val)){ //Teile mit HTML-Inhalt ausschließen
    echo $val.'<br />';
    preg_match_all($pattern, $val, $matches);
    echo '<pre>';print_r($matches);echo '</pre>';
  }
}
Wenn ich preg_match_all ausgebe bekomme ich 0, also scheint es keine anderweitigen Fehler zu geben.
Die Schleife gibt mir folgende Ausgabe:

Code:
Der Feuerstättenbescheid als Verwaltungsakt im Sinne des 35 VwVfG

Array
(
    [0] => Array
        (
        )

)

Anhörung nach 28 VwVfG

Array
(
    [0] => Array
        (
        )

)

Aufbau des Feuerstättenbescheides

Array
(
    [0] => Array
        (
        )

)

usw.

Ich hab das Muster in einem [Regular Expression Checker] getestet und dort scheint es zu funktionieren.

Seh ich das überhaupt richtig, dass
Code:
[A-Z]+
erstmal festlegt, dass am Anfang ein Großbuchstabe vorhanden sein muss?
Und dass
Code:
[A-z]{3,}
mindestens 3 Buchstaben verlangt?

Wenn ja, wo hakt es dann?
 
Zuletzt bearbeitet:
Dein Pattern hat zuviel Einschränken drin.
Mit ^ und $ sagst du, dass der ganze String dieser Bedinung erfüllen muss
Das * Aussherhalb der Klammer bedeutet, dass Substantiv direkt gefolgt ans Substantiv kommen muss

Mit preg_match_all() reicht es aus, wenn das Pattern nur den Suchstring beinhaltet um ihn in einem Text mehrfach zu finden

Code:
/([A-Z]+[A-z]{3,})/
Code:
Der Feuerstättenbescheid als Verwaltungsakt im Sinne des 35 VwVfG
Array
(
    [0] =Array
        (
            [0] =Feuerst
            [1] =Verwaltungsakt
            [2] =Sinne
            [3] =VwVfG
        )
    [1] =Array
        (
            [0] =Feuerst
            [1] =Verwaltungsakt
            [2] =Sinne
            [3] =VwVfG
        )
)
 
Um auch äöü etc und Zahlen mitzunehmen würde ich das gleich mit Charakterklassen machen
Code:
([[:upper:]ÄÖÜ][[:alpha:]äöüÄÖÜ]{3,})
 
Hatte das jetzt so
Code:
'/([A-ZÄÖÜ]+[A-zäöüß]{3,})/
. Werd mir diese POSIX-Klassen aber mal genauer ansehen, sieht recht brauchbar aus.

Danke
 
Zurück