Php preg_match String-Problem

mingelburns

Mitglied
Hallo,

ich habe folgendes Problem und hoffe, jemand kann mir helfen:

Ich möchte testen, welcher Form ein Eingabestring ist, wenn ich mehrere Vergleichsstrings habe.
Beispiel:
Ich möchte wissen, ob der String "Peter Carstens betritt den Raum und grüßt Anita Lorenz" der Form
"{pers1} betritt den Raum und grüßt {pers2}" oder
"{pers1} verabschiedet sich von {pers2}" oder
"{pers2} wird von {pers1} zur Tür geleitet" ist.

Das soll mit unbegrenzt vielen Vergleichsstrings möglich sein und ich möchte die Wörter haben, die an der Stelle von {pers1} und {pers2} stehen.

Hat da jemand eine Idee, wie ich das hinbekommen kann?

Edit: Kann ich dafür irgendwie preg_split verwenden?

Gruß
mingel
 
Zuletzt bearbeitet:
Hat da wirklich niemand einen Rat?

Mit geht es in erster Linie darum, an die Namen im String zu kommen und zu wissen, welcher String es ist.
Was vielleicht auch gehen würde ist, das der String mehrere Teilstrings enthalten muss, aber wie man das prüft weiß ich leider nicht. Am besten wäre da natürlich ein Befehl, damit man das nicht irgendwie über eine Schleife machen muss...

Gruß
mingel
 
Das könntest du so machen:

PHP:
$person = '\s*([a-z][a-z\s]+)\s*';

$arr = array(
"${person}betritt den Raum und grüßt${person}",
"${person}verabschiedet sich von${person}",
"${person}wird von${person}zur Tür geleitet"
);

if(preg_match('@('.implode('|',$arr).')@i', $str, $out))
  {
    print_r(array_slice($out,2));
  }

$person wäre erstmal der Ausdruck für die Personennamen....ein Buchstabe gefolgt von Leerzeichen oder Buchstaben. Der Auisdruck ist geklammert, damit die Ergebnisse(Namen) separat gespeichert werden.

Dann ein Array mit den "Sätzen" ....dort fügst du dort,, wo du den Namen erwartest, das ${person} ein.

Dieser Array wird dann mit dem Delimiter | impodet.....Ergebnis ist ein RegExp.... ein Suchmuster mit Alternativen, diese Alternativen beinhalten alle Sätze, ab Element 2 im Array out findest du dann die ermittelten Namen.


Ansonsten.... bitte nicht pushen....nächstes mal schliesse ich da Thema ;)
 
Zurück