Maresa P: Fehler in regexp

Hallo,

ich habe ein Perlscript auf meinem Webspace.
Dieses Script sucht in einer MySQL Datenbank nach überinstimmungen mit einem String, welcher vorher in ein Formularfeld eingegeben wird, mit Inhalten aus einer MySQL Datenbank.

Der "Vergleich" sieht so aus:

[...]
$search=$dbh->quote($search) or die $DBI::errstr;
$cmd="select id,begr from $lang where erkl REGEXP $search or begr REGEXP $search;";
$sth=$dbh->prepare($cmd) or die $DBI::errstr;
$sth->execute or die $DBI::errstr;
[...]

Dies funktioniert auch alles wunderbar, solange ich in das Formularfeld kein + und kein ? eingebe.

Gebe ich eines der Beiden Zeichen ein, bekomme ich folgende Fehlermeldung:

Content-type: text/plain WARN: DBD::mysql::st execute failed: Got error 'repetition-operator operand invalid' from regexp at /pfad/htdocs/cgi-bin/script.cgi line 82. Content-type: text/plain FATAL ERROR: Got error 'repetition-operator operand invalid' from regexp at /pfad/htdocs/cgi-bin/script.cgi on line 82.

Line 82 ist in diesem Fall folgende Zeile:
$sth->execute or die $DBI::errstr;

Frage: Wie kann ich dieses Problem beheben?

Vielen Dank für Euere Hilfe
Maresa P

  1. Hi,
    ich nehme stark an, dass + und ? (und bestimmt auch ., *, ...) als Anweisungen für den regulären Ausdruck interpretiert werden => escapen.
    Der Yeti

    --
    Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
    Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
    Und bin so klug als wie zuvor!
    sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:[ zu:) fl:| ss:) ls:< js:|
    http://community.de.selfhtml.org/fanprojekte/selfcode.htm
    1. Hi,

      Hi Yeti,

      ich nehme stark an, dass + und ? (und bestimmt auch ., *, ...) als Anweisungen für den regulären Ausdruck interpretiert werden => escapen.

      ja, das nehme ich auch an.
      Wie escape ich denn in Perl "automatisch" den String $search?

      Der Yeti

      Viele Grüße
      Maresa

      1. Hi,

        ja, das nehme ich auch an.
        Wie escape ich denn in Perl "automatisch" den String $search?

        Das hier sieht gut aus: http://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch01_14.htm

        Der Yeti

        --
        Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
        Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
        Und bin so klug als wie zuvor!
        sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:[ zu:) fl:| ss:) ls:< js:|
        http://community.de.selfhtml.org/fanprojekte/selfcode.htm
        1. Hi,

          Hallo Yeti,

          ja, das nehme ich auch an.
          Wie escape ich denn in Perl "automatisch" den String $search?

          Das hier sieht gut aus: http://iis1.cps.unizar.es/Oreilly/perl/cookbook/ch01_14.htm

          Vielen Dank! Das hat mir weitergeholfen. Ich habe das Problem nun lösen können. Ich escape nun die zu Fehlern führenden Zeichen wie folgt:

          $search =~ s/([?+])/\$1/g;

          Der Yeti

          Viele Grüße
          Maresa

  2. Kann es vielleicht sein, dass + und ? als spezielle Befehle interpretiert werden? Versuch doch mal, vor Ausführen der SELECT-Abfrage diesen Zeichen ein \ voranzustellen oder schau mal in der mysql-Hilfe dazu.