Veröffentlicht 29. Oktober 200717 j Hallo, ich möchte zwei Strings vergleichen, wobei einer aus einer Datenbanktabelle kommt. Wenn beide übereinstimmen wird die Variable $nofilter auf false gesetzt. Leider bekomme ich die Fehlermeldung Warning: preg_match(): Unknown modifier '/' . Ich sehe leider den Fehler nicht. In einem Testskript hat das so funktioniert. $row = mysql_fetch_object($result_filter); $text1 = $row->filter; $text2 = $hp; $text1=addslashes($text1); $text2=addslashes($text2); if (preg_match("/\b".$text1."/i", $text2)) { echo "Es wurde eine Übereinstimmung gefunden."; $nofilter=false; } else { echo "Es wurde keine Übereinstimmung gefunden."; } [/php]
29. Oktober 200717 j hast du dir mal $text1 ausgegeben lassen? würde vielleicht bei der Fehleranalyse helfen.
30. Oktober 200717 j Benutze mal statt addslashes() preg_quote() für text1. Für text2 solltest du addslashes ganz weglassen.
1. November 200717 j Ich habe mal $tex1 ausgeben lassen und preg_quote benutzt sowie bei $text2 addslashes() komplett weggelassen. Ich glaube, dass Programm knickt weg, sobald eine Internetseite drinsteht. Diese wird dann so (Beispiel) http\://www\.insulate\.org Als Klartext, also ohne die Slashes ist es in der Datenbank eingetragen. Oder hat das preg_quote das gemacht und ist das korrekt? Ich bekomme dann die Fehlermeldung von oben.
2. November 200717 j preg_quote() maskiert alle Zeichen, die in RegEx eine besondere Funktion haben. Daher auch '\.'. Du hast noch zusätzlich das Problem, dass du die '/' maskieren müsstest, da du diese als Begrenzer für deinen RegEx nimmst. Alternativ kannst du auch '§' oder ein anderes beliebiges Zeichen als Begrenzer nehmen, dass nicht innerhalb deines RegEx vorkommt. So wie der aktuelle Stand ist, nimmt die RegEx_Engine http: als das Muster an, das gesucht werden soll. Der Text der noch folgt, wird als Modifier interpretiert.
6. November 200717 j preg_quote() maskiert alle Zeichen, die in RegEx eine besondere Funktion haben. Daher auch '\.'. Du hast noch zusätzlich das Problem, dass du die '/' maskieren müsstest, da du diese als Begrenzer für deinen RegEx nimmst. Alternativ kannst du auch '§' oder ein anderes beliebiges Zeichen als Begrenzer nehmen, dass nicht innerhalb deines RegEx vorkommt. Alternativ kann man der Funktion preg_quote() auch als zweiten Parameter den Begrenzer übergeben, der dann automatisch mit maskiert wird.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.