Heim  >  Artikel  >  Datenbank  >  Warum schlägt meine MySQL-REGEXP-Abfrage fehl, wenn der Wiederholungsoperanden ungültig ist?

Warum schlägt meine MySQL-REGEXP-Abfrage fehl, wenn der Wiederholungsoperanden ungültig ist?

Barbara Streisand
Barbara StreisandOriginal
2024-11-26 15:54:11596Durchsuche

Why Does My MySQL REGEXP Query Fail with

Fehlgeschlagener regulärer Ausdruck: „Wiederholungsoperator-Operand ungültig“

Beim Versuch, die folgende MySQL-Abfrage auszuführen:

SELECT text 
FROM `articles` 
WHERE content REGEXP '.*<img.*?src=\"http://www' 
ORDER BY date DESC

Sie stoßen auf das Fehler: #1139 – Vom regulären Ausdruck wurde der Fehler „Operand des Wiederholungsoperators ungültig“ angezeigt. Obwohl der reguläre Ausdruck in Notepad korrekt funktioniert, lehnt MySQL ihn ab.

Verstehen des Problems: POSIX vs. PCRE

Die MySQL-Engine für reguläre Ausdrücke hält sich an POSIX 1003.2, das das Fragezeichen nicht unterstützt (?) als nicht gieriger Modifikator in Quantoren ( und ). Sie können also nicht beschäftigen? Und ? in Ihren regulären Ausdrücken.

Lösung: Verwendung eines Greedy-Quantifizierers

Um dieses Problem zu lösen, verwenden Sie die Greedy-Version des Quantifizierers, die für Ihren beabsichtigten Zweck immer noch ausreicht. Um jedoch eine unerwünschte Übereinstimmung von Elementen wie:

<img>

zu verhindern, fügen Sie eine negierte Zeichenklasse wie folgt ein:

'<img[^>]*src="http://www'

Bedenken Sie, dass das Zeichen „kein Escapezeichen erfordert und dass das .* am Anfang ist implizit.

Das obige ist der detaillierte Inhalt vonWarum schlägt meine MySQL-REGEXP-Abfrage fehl, wenn der Wiederholungsoperanden ungültig ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn