Maison  >  Article  >  base de données  >  Pourquoi ma requête MySQL REGEXP échoue-t-elle avec « opérande d'opérateur de répétition invalide » ?

Pourquoi ma requête MySQL REGEXP échoue-t-elle avec « opérande d'opérateur de répétition invalide » ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 15:54:11595parcourir

Why Does My MySQL REGEXP Query Fail with

Échec de l'expression régulière : 'opérande d'opérateur de répétition invalide'

Lorsque vous tentez d'exécuter la requête MySQL suivante :

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

vous rencontrez le erreur : #1139 - Erreur obtenue « opérande d'opérateur de répétition invalide » à partir de l'expression rationnelle. Bien que l'expression régulière fonctionne correctement dans Notepad, MySQL la rejette.

Comprendre le problème : POSIX vs PCRE

Le moteur d'expression régulière MySQL adhère à POSIX 1003.2, qui ne prend pas en charge le point d'interrogation (?) comme modificateur non gourmand dans les quantificateurs ( et ). Par conséquent, vous ne pouvez pas employer  ? et ? dans vos expressions régulières.

Résolution : Utiliser un quantificateur gourmand

Pour résoudre ce problème, utilisez la version gourmande du quantificateur, qui suffira toujours pour l'objectif recherché. Néanmoins, pour éviter toute correspondance indésirable d'éléments tels que :

<img>

incorporez une classe de caractères niée comme suit :

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

N'oubliez pas que le caractère " ne nécessite pas d'échappement et que le .* au début est implicite.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn