2009-07-02 5 views
0

Ich verwende REGEXP für die Suche in einer MySQL DB, aber es gibt nicht die richtigen Daten, wenn ich ' (Apostroph) und - (Strich) einfügen in der Suchanfrage.REGEXP funktioniert nicht für '(Apostroph) und - (Bindestrich) in Mysql

Gibt es eine Lösung dafür? Hier

ist die vollständige Abfrage:

select * from table where (field REGEXP 'SAN DIEGO | SAN DIEGO |^SAN DIEGO' or field2 REGEXP 'SAN DIEGO | SAN DIEGO |^SAN DIEGO') 
+0

Können Sie uns die RegExp mitteilen, die Sie verwenden? – Greg

+0

kann nicht verstehen, was du sagst? – Avinash

+0

Bitte geben Sie einige Beispiele für Strings an, die Sie abgleichen möchten. –

Antwort

0

Haben setzen Sie die Zeichen in eckigen Klammern? Versuchen Sie etwas wie folgt:

select * from Table where Field regexp '[\'-]' 
+0

können Sie bitte erklären, wo ich diese Klammern setzen? meine Regexp verknüpfen diese REGEXP 'Text | Text |^Text ' – Avinash

+0

Wenn im obigen Kommentar Text enthalten' oder - es wird nicht funktionieren – Avinash

+0

@Avinash: Bitte bearbeiten Sie Ihre Frage, um Ihre gesamte Anfrage einzuschließen. –

1

Wenn Ihre REGEXP String Trennzeichen einfache Anführungszeichen sind, entziehen Sie sie innerhalb der Zeichenfolge. Auch abhängig von Ihrer Business-Logik und Tabellenstruktur, könnten Sie eine CONCAT tun, um die Aussage zu verdichten:

SELECT field1, field2 
WHERE CONCAT(field1, field2) REGEXP 'Mary\'s Restaurant' 

Wenn Sie einen Bindestrich in einer Zeichenklasse verwenden, entweder entkommen oder sie es das erste Element machen in die Klasse, so ist der Motor denkt nicht, dass Sie einen Bereich angeben, sind versuchen:

... REGEXP 'Mary\'s[- _]Restaurant' 

Wenn Sie Ihr San Diego Beispiel verwenden, könnten die Lage sein, Sie die REGEXP von Grenzen mit Wort zu reduzieren:

SELECT field1, field2 
WHERE CONCAT(field1, field2) REGEXP '[[:<:]]SAN DIEGO[[:>:]]' 

Siehe: MySQL 5.1 REGEXP Manual

Verwandte Themen