Expressions régulières MYSQL (REGEXP) avec syntaxe & Exemples

Anonim

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 jokers, 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 l'instruction SELECT standard
  • "WHERE fieldname" est le nom de la colonne sur laquelle l'expression régulière doit être exécutée.
  • "REGEXP 'pattern'" REGEXP est l'opérateur d'expression régulière et 'pattern' représente le modèle à rechercher par REGEXP. 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 vaut mieux 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 mot code. Peu importe que le «code» soit au début, au milieu ou à la fin du titre. Tant qu'il est contenu dans le titre, il sera pris en compte.

Supposons que nous voulions rechercher des films qui commencent par a, b, c ou d, suivis d'un nombre quelconque d'autres caractères, comment pourrions-nous 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]';

L'exécution du script ci-dessus dans MySQL workbench 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 signe caret (^) signifie que la correspondance de motif 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 caractères NOT et voyons les résultats que nous obtiendrons après l'exécution de notre requête.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

L'exécution du script ci-dessus dans MySQL 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 signe caret (^) signifie que la correspondance de modèle doit être appliquée au début et la charlist [abcd] signifie que les titres de film 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 voulions rechercher des titres de films commençant par le modèle "code" en utilisant uniquement 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 métacaractère astérisque (*) est utilisé pour correspondre à zéro (0) ou plusieurs instances des chaînes qui le précèdent SELECT * FROM films O le titre REGEXP 'da *'; donnera tous les films contenant des caractères "da". Par exemple, Da Vinci Code, Daddy's Little Girls.
+ Le métacaractère plus (+) est utilisé pour faire correspondre une ou plusieurs instances de chaînes le précédant. SELECT * FROM `movies` WHERE` title` REGEXP 'mon +'; donnera tous les films contenant des caractères "mon" .Par exemple, les anges et les démons.
? Le métacaractère question (?) Est utilisé pour correspondre à zéro (0) ou à une instance des chaînes qui le précèdent. SELECT * FROM `categories` WHERE` nom_catégorie` REGEXP 'com?'; donnera toutes les catégories contenant la chaîne com. Par exemple, la comédie, la comédie romantique.
. Le métacaractère point (.) Est utilisé pour faire correspondre n'importe quel caractère unique à l'exception d'une nouvelle ligne. SELECT * FROM films WHERE `year_released` REGEXP '200.'; donnera tous les films sortis dans les années commençant par les caractères "200" suivis de n'importe quel caractère unique. Par exemple, 2005,2007,2008 etc.
[abc] La charlist [abc] est utilisée pour correspondre à l'un des caractères inclus. SELECT * FROM `movies` WHERE` title` REGEXP '[vwxyz]'; donnera tous les films contenant un seul caractère dans "vwxyz". Par exemple, X-Men, Da Vinci Code, etc.
[abc] La charlist [abc] est utilisée pour faire correspondre tous les caractères à l'exception de ceux inclus. SELECT * FROM `movies` WHERE` title` REGEXP '[vwxyz]'; donnera tous les films contenant des caractères 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 `membres` 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 signe curseur (^) est utilisé pour démarrer le match au début. SELECT * FROM `movies` WHERE` title` REGEXP '[cd]'; donne tous les films dont le titre commence par l'un des caractères de "cd". Par exemple, Code Name Black, Daddy's Little Girls et Da Vinci Code.
| La barre verticale (|) est utilisée pour isoler les alternatives. SELECT * FROM `movies` WHERE` title` REGEXP '[cd] | [u]'; donne tous les films dont le titre commence par l'un des caractères de "cd" ou "u". Par exemple, Nom de code Black, Daddy's Little Girl, Da Vinci Code et Underworld - Awakening.
[[: <:]] Le [[: <:]] correspond au début des mots. SELECT * FROM `movies` WHERE` title` 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 `movies` WHERE` title` REGEXP 'ack [[:>:]]'; donne tous les films dont les titres se terminent par les caractères "ack". Par exemple, Code Name Black.
[:classer:] La [: classe:] correspond à une classe de caractères par exemple [: alpha:] pour assortir les lettres, [: space:] pour correspondre à l' espace blanc, [: punct:] est ponctuations match et [: upper:] pour les lettres de la classe supérieure. SELECT * FROM `movies` WHERE` title` REGEXP '[: alpha:]'; donne tous les films dont les titres ne contiennent que des lettres. Par exemple, Oublier Sarah Marshal, X-Men, etc. Un film comme Pirates des Caraïbes 4 sera omis par 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 à implémenter des utilitaires de recherche avancée pour nos systèmes de base 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.