Text nach Muster durchsuchen

Deyaz

Grünschnabel
Hallo zusammen,

ich möchte einen Text in php nach einem bestimmtem Muster durchsuchen. Das Ziel ist es, dass eine 12-stellige Ziffernreihenfolge am Ende ausgegeben wird.

Die Reihenfolge besteht immer aus 2 Buchstaben und 10 Ziffern (können also Buchstaben und Zahlen beinhalten). Diese Sache ist allerdings nicht fix zwischen einem bestimmten Text eingebunden (sonst könnte man das ja bequem per preg_match aussortieren ;)).

Bisher sieht mein Fortschritt so aus:

PHP:
$muster = "auch";
        $Text = "Unter anderem sind auch JF498i053193 zu finden. Die ersten beiden Ziffern sind immer Buchstaben, ansonsten können 10 Zahlen und Buchstaben folgen";
        $Text = explode (" ",$Text);
        $Anzahl = count ($Text);
        $Woerter = array ();
        $letzesvorkommen = -1;
        for ($x=1;$x<=$Anzahl;$x++){
            if ($muster == $Text["$x"]){
                $z = $x;
                $z--;

                for ($zähler=$letzesvorkommen + 1;$zähler<$x;$zähler++){
                    $Woerter[] = $Text["$zähler"];
                }
                $z = $z + 2;
                $Woerter[] = $Text["$z"];
                $letzesvorkommen = $x + 1;
            }
        }
        print_r ($Woerter);

Damit bekomme ich zwar die Ziffernreihenfolge in die Ausgabe rein (Arrayeintrag 4), wobei z. B. die anderen Arrayeinträge nicht notwendig. Außerdem ist das "auch", nach dem momentan gefiltert wird, eben auch nicht fix, sondern variabel.

Weiß da jemand weiter?
 
Diese Sache ist allerdings nicht fix zwischen einem bestimmten Text eingebunden (sonst könnte man das ja bequem per preg_match aussortieren
Verstehe nicht, warum es nicht mit Regex gehen soll. Dies funktioniert einwandfrei:
PHP:
   $muster = "auch";
    $text = "Unter anderem sind auch JF498i053193 zu finden. Die ersten beiden Ziffern sind immer Buchstaben, ansonsten können 10 Zahlen und Buchstaben folgen";
    preg_match("/" . $muster . " *([a-zA-Z]{2}[a-zA-Z0-9]{10})/", $text, $match);
    var_dump($match);
    $muster = "oder";
    $text = "Unter anderem sind oder AB479390gf98 zu finden. Die ersten beiden Ziffern sind immer Buchstaben, ansonsten können 10 Zahlen und Buchstaben folgen";
    preg_match("/" . $muster . " *([a-zA-Z]{2}[a-zA-Z0-9]{10})/", $text, $match);
    var_dump($match);
 
Zuletzt bearbeitet:
Danke, das stimmt.
Ich hab das mittlerweile anders gelöst. Für alle, die es interessiert:

PHP:
$words = array_filter(explode(' ', $Text), function($val){
            return strlen($val) == 12;    
        });
 
Bist Du sicher, dass das deine Anforderung genau erfüllt?
Die ersten beiden Ziffern sind immer Buchstaben, ansonsten können 10 Zahlen und Buchstaben folgen
Du prüfst ja nur die Lange und nicht welche Zeichen drin sind. Soweit ich das überblicke, würde auch "1a78fk98;,-_" gefunden.
 
Wie verhinderst Du, dass das Wort "Absolutismus" gefunden wird? Das sind zwei Buchstaben, gefolgt von 10 Buchstaben. Vllt solltest Du noch prüfen, ob die ersten beiden Buchstaben großgeschrieben sind.
 
Man müsste mehr über die genauen Anforderungen wissen. Aktuell kann man es tatsächlich nur sehr näherungsweise lösen. Die beiden letzten Einwände sind ganz richtig.

Nach der bisher gegebenen Definition ist „Absolutismus“ im Grunde sogar eine gültige ID. Das muss also nicht mal ein false positive sein, sondern könnte wirklich das sein, was gefunden werden soll. ;) Wobei die Wahrscheinlichkeit natürlich sicherlich hoch ist, dass der Treffer falsch wäre.
 

Neue Beiträge

Zurück