Expressions régulières MYSQL (REGEXP) avec syntaxe et exemples
Que sont les expressions régulières ?
Les expressions régulières aident à rechercher des données correspondant à des critères complexes. Nous avons examiné les caractères génériques dans le didacticiel précédent. Si vous avez déjà travaillé avec des caractères génériques, vous vous demandez peut-être pourquoi apprendre les expressions régulières alors que vous pouvez obtenir des résultats similaires en utilisant les caractères génériques. Car, par rapport aux caractères génériques, les expressions régulières nous permettent de rechercher des données correspondant à des critères encore plus complexes.
Syntaxe de base
La syntaxe de base d'une expression régulière est la suivante
SELECT statements... WHERE fieldname REGEXP 'pattern';
ICI -
- «Instructions SELECT…» est la norme Instruction SELECT
- « OÙ nom du champ » est le nom de la colonne sur laquelle l'expression régulière doit être exécutée.
- « Modèle » REGEXP » REGEXP est l'opérateur d'expression régulière et « motif » représente le modèle auquel REGEXP doit correspondre. RLIKE est le synonyme de REGEXP et obtient les mêmes résultats que REGEXP. Pour éviter de le confondre avec l'opérateur LIKE, il mieux vaut utiliser REGEXP à la place.
Regardons maintenant un exemple pratique-
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
La requête ci-dessus recherche tous les titres de films contenant le code de mot. Peu importe que le « code » se trouve au début, au milieu ou à la fin du titre. Tant que cela est contenu dans le titre, il sera pris en compte.
Supposons que nous souhaitions rechercher des films commençant par a, b, c ou d , suivis d'un certain nombre d'autres personnages, comment procéderions-nous pour y parvenir. Nous pouvons utiliser une expression régulière avec les métacaractères pour obtenir les résultats souhaités.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Exécuter le script ci-dessus dans MySQL établi contre myflixdb nous donne les résultats suivants.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
4 | Code Name Black | Edgar Jimz | 2010 | NULL |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
6 | Angels and Demons | NULL | 2007 | 6 |
7 | Davinci Code | NULL | 2007 | 6 |
Examinons maintenant de près notre expression régulière responsable du résultat ci-dessus.
'^[abcd]' le caret (^) signifie que la correspondance de modèle doit être appliquée au début et la charlist [abcd] signifie que seuls les titres de films commençant par a, b, c ou d sont renvoyés dans notre jeu de résultats.
Modifions notre script ci-dessus et utilisons la liste de chars NOT et voyons quels résultats nous obtiendrons après avoir exécuté notre requête.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Exécuter le script ci-dessus dans MySQL Le workbench contre myflixdb nous donne les résultats suivants.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
3 | X-Men | 2008 | ||
9 | Honey mooners | John Schultz | 2005 | 8 |
16 | 67% Guilty | 2012 | ||
17 | The Great Dictator | Chalie Chaplie | 1920 | 7 |
18 | sample movie | Anonymous | 8 | |
19 | movie 3 | John Brown | 1920 | 8 |
Examinons maintenant de près notre expression régulière responsable des résultats ci-dessus.
'^[^abcd]', le caret (^) signifie que la correspondance de modèle doit être appliquée au début et la charlist [^abcd] signifie que les titres de films commençant par l'un des caractères inclus sont exclus du jeu de résultats.
Métacaractères d'expression régulière
Ce que nous avons examiné dans l’exemple ci-dessus est la forme la plus simple d’une expression régulière. Examinons maintenant les correspondances de modèles d'expressions régulières plus avancées. Supposons que nous souhaitions rechercher des titres de films commençant par le motif « code » uniquement à l’aide d’une expression régulière, comment procéderions-nous ? La réponse est les métacaractères. Ils nous permettent d'affiner nos résultats de recherche de modèles à l'aide d'expressions régulières.
Carboniser | Description | Exemple | |
---|---|---|---|
* | Le astérisque (*) le métacaractère est utilisé pour faire correspondre zéro (0) ou plusieurs instances des chaînes qui le précèdent | SELECT * FROM films WHERE titre REGEXP 'da*'; donnera tous les films contenant des caractères «da». Par exemple, Da Vinci Code, Daddy's Little Girls. | |
+ | Le plus (+) le métacaractère est utilisé pour faire correspondre une ou plusieurs instances de chaînes qui le précèdent. | SELECT * FROM `films` WHERE `titre` REGEXP 'mon+'; donnera tous les films contenant des personnages « mon ». Par exemple, Anges et Démons. | |
? | La question(?) le métacaractère est utilisé pour correspondre à zéro (0) ou à une instance des chaînes qui le précèdent. | SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; donnera toutes les catégories contenant la chaîne com. Par exemple, comédie, comédie romantique. | |
. | Le point (.) le métacaractère est utilisé pour correspondre à n'importe quel caractère, à l'exception d'une nouvelle ligne. | SELECT * FROM films WHERE `year_released` REGEXP '200.'; donnera tous les films sortis au cours des années en commençant par les caractères « 200 » suivis d'un seul personnage. Par exemple, 2005,2007,2008, , , etc. | |
[abc] | Le charliste [abc] est utilisé pour faire correspondre l'un des caractères inclus. | SELECT * FROM `films` WHERE `titre` REGEXP '[vwxyz]'; donnera tous les films contenant un seul personnage dans « vwxyz ». Par exemple, X-Men, Da Vinci Code, etc. | |
[^ abc] | Le charliste [^abc] est utilisé pour faire correspondre tous les caractères à l'exclusion de ceux inclus. | SELECT * FROM `films` WHERE `titre` REGEXP '^[^vwxyz]'; donnera tous les films contenant des personnages autres que ceux de « vwxyz ». | |
[AZ] | Le [AZ] est utilisé pour correspondre à n’importe quelle lettre majuscule. | SELECT * FROM `membres` WHERE `adresse_postale` REGEXP '[AZ]'; donnera tous les membres qui ont une adresse postale contenant n'importe quel caractère de A à Z. Par exemple, Janet Jones avec le numéro de membre 1. | |
[az] | Le [az] est utilisé pour correspondre à n’importe quelle lettre minuscule | SELECT * FROM `membres` WHERE `adresse_postale` REGEXP '[az]'; donnera tous les membres qui ont des adresses postales contenant n'importe quel caractère de a à z. .Par exemple, Janet Jones avec le numéro de membre 1. | |
[0-9] | Le [0-9] est utilisé pour faire correspondre n’importe quel chiffre de 0 à 9. | SELECT * FROM `members` WHERE `contact_number` REGEXP '[0-9]' donnera à tous les membres ayant soumis des numéros de contact contenant les caractères « [0-9] ». Par exemple, Robert Phil. | |
^ | Le curseur (^) est utilisé pour démarrer le match au début. | SELECT * FROM `films` WHERE `titre` REGEXP '^[cd]'; donne tous les films dont le titre commence par l'un des personnages du « cd ». Par exemple, Code Name Black, Daddy's Little Girls et Da Vinci Code. | |
| | Le barre verticale (|) est utilisé pour isoler les alternatives. | SELECT * FROM `films` WHERE `titre` REGEXP '^[cd]|^[u]'; donne tous les films dont le titre commence par l'un des caractères de « cd » ou « u ». Par exemple, Code Name Black, Daddy's Little Girl, Da Vinci Code et Underworld – AwakenING. | |
[[:<:]] | Le[[:<:]] correspond au début des mots. | SELECT * FROM `films` WHERE `titre` REGEXP '[[:<:]]pour';
donne tous les films avec des titres commençant par les personnages. Par exemple : Oublier Sarah Marshal. |
|
[[:>:]] | Le [[:>:]] correspond à la fin des mots. | SELECT * FROM `films` WHERE `titre` REGEXP 'ack[[:>:]]';
donne tous les films dont les titres se terminent par les caractères « ack » .Par exemple, Nom de code Noir. |
|
[:classer:] | Le [:classer:] correspond à une classe de caractères, c'est-à-dire
[:alpha:] pour faire correspondre les lettres, [:espacer:] pour correspondre à l'espace blanc, [:ponct:] correspond aux ponctuations et [:upper:] pour les lettres de classe supérieure. |
SELECT * FROM `films` WHERE `titre` REGEXP '[:alpha:]';
donne tous les films dont les titres contiennent uniquement des lettres .Par exemple, oublier Sarah Marshal, X-Men etc. Les films comme Pirates des Caraïbes 4 seront omis de cette requête. |
La barre oblique inverse (\) est utilisée comme caractère d'échappement. Si nous voulons l'utiliser dans le cadre du modèle dans une expression régulière, nous devons utiliser des doubles barres obliques inverses (\\)
Résumé
- Les expressions régulières fournissent une correspondance de modèle puissante et flexible qui peut nous aider à mettre en œuvre des utilitaires de recherche puissants pour nos systèmes de bases de données.
- REGEXP est l'opérateur utilisé lors de l'exécution de correspondances de modèles d'expressions régulières. RLIKE est le synonyme
- Les expressions régulières prennent en charge un certain nombre de métacaractères qui permettent plus de flexibilité et de contrôle lors de l'exécution de correspondances de modèles.
- La barre oblique inverse est utilisée comme caractère d'échappement dans les expressions régulières. Il n'est pris en compte dans la correspondance de modèle que si des doubles barres obliques inverses ont été utilisées.
- Les expressions régulières ne sont pas sensibles à la casse.