2010-01-02 3 views
0

Une table contient la chaîne "Hello world!"Comment écrire MySQL REGEXP?

Pensant à * comme caractère générique ordinaire, comment puis-je écrire un REGEXP qui evalute à vrai pour 'W*rld!' mais faux pour 'H*rld!' puisque H fait partie d'un autre mot. 'W*rld' devrait evalute à faux ainsi en raison de la '!'

Répondre

1

Vous pouvez utiliser des expressions régulières dans MySQL:

SELECT 'Hello world!' REGEXP 'H[[:alnum:]]+rld!' 
0 
SELECT 'Hello world!' REGEXP 'w[[:alnum:]]+rld!' 
1 

Plus d'informations sur la syntaxe se trouve here.

+0

Merci, fonctionne comme un charme. –

2

Si vous êtes à la recherche de faire correspondre le mot world, puis faire de fuite:

SELECT * FROM `table` WHERE `field_name` LIKE "w_rld!"; 

Le _ permet un seul caractère générique.

Edit: Je réalise l'OP a demandé cette solution avec REGEXP, mais étant donné que le même résultat peut être réalisé sans utilisant des expressions régulières, je fourni cette solution viable qui devrait fonctionner plus rapidement qu'un REGEXP.

+1

D'accord, mais puisque le résultat pourrait être atteint * sans * REGEXP, la bonne façon dans un environnement de production ne serait-elle pas d'utiliser la solution sans REGEXP? –

+0

Alors, lequel est le plus rapide? 'REGEXP' ou' LIKE'? – Nirmal

+0

@Doug Neiner: Bien sûr, vous devriez préférer LIKE sur REGEXP si l'un ou l'autre fonctionne. Mais que se passerait-il si les exemples qu'il donnait n'étaient que des exemples simplifiés et qu'en réalité il devait faire correspondre des choses plus complexes qui ne peuvent être faites avec un LIKE? La performance de LIKE n'est pas pertinente si elle donne le mauvais résultat. –

8

Utilisation:

WHERE column REGEXP 'W[[:alnum:]]+rld!' 

Alternativement, vous pouvez utiliser:

WHERE column RLIKE 'W[[:alnum:]]+rld!' 
  • RLIKE est synonyme de REGEXP
  • [[:alnum:]] permettra à tout caractère alphanumérique, [[:alnum:]]+ permettra multiples
  • REGEXP \ RLIKE n'est pas sensible à la casse, sauf s'il est utilisé avec des chaînes binaires.

Référence: MySQL Regex Support

+0

Edité pour ajouter que REGEXP n'est pas sensible à la casse ... –

+0

+1 Bonne réponse –

+0

Merci Ponies! On dirait qu'il y a beaucoup à apprendre. – Nirmal