English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Nella sezione precedente abbiamo scoperto che MySQL può fare uso di LIKE ...% per effettuare una corrispondenza vaga.
MySQL supporta anche altri tipi di corrispondenza degli espressioni regolari, MySQL utilizza l'operatore REGEXP per eseguire la corrispondenza degli espressioni regolari.
Se conoscete PHP o Perl, è molto semplice perché la corrispondenza degli espressioni regolari in MySQL è simile a questi script.
I modelli di espressione regolare elencati nella tabella possono essere applicati all'operatore REGEXP.
Schema | Descrizione |
---|---|
^ | Corrisponde all'inizio della stringa di input. Se è impostata la proprietà Multiline dell'oggetto RegExp, ^ corrisponde anche alla posizione dopo '\n' o '\r'. |
$ | Corrisponde alla fine della stringa di input. Se è impostata la proprietà Multiline dell'oggetto RegExp, $ corrisponde anche alla posizione prima di '\n' o '\r'. |
. | Corrisponde a qualsiasi singolo carattere tranne '\n'. Per corrispondere a qualsiasi carattere incluso, utilizzare lo schema '[.\n]'. |
[...] | Set di caratteri. Corrisponde a qualsiasi carattere incluso. Ad esempio, '[abc]' corrisponde a 'a' in 'plain'. |
[^...] | Set di caratteri negativi. Corrisponde a qualsiasi carattere non incluso. Ad esempio, '[^abc]' corrisponde a 'p' in 'plain'. |
p1|p2|p3 | Corrisponde a p1 o p2 o p3. Ad esempio, 'z|food' corrisponde a 'z' o 'food'. '(z|f)ood' corrisponde a 'zood' o 'food'. |
* | Corrisponde alla precedente espressione zero o più volte. Ad esempio, 'zo*' corrisponde a 'z' e 'zoo'. * è equivalente a {0,}. |
+ | Corrisponde alla precedente espressione espressa una o più volte. Ad esempio, 'zo+' corrisponde a 'zo' e 'zoo', ma non a 'z'. + è equivalente a {1,}. |
{n} | n è un intero non negativo. Corrisponde a n volte consecutive. Ad esempio, 'o{2}' non corrisponde a 'o' in 'Bob', ma corrisponde ai due 'o' in 'food'. |
{n,m} | m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
了解以上的正则需求后,我们就可以根据自己的需求来编写带有正则表达式的SQL语句。以下我们将列出几个小示例(表名:person_tbl )来加深我们的理解:
查找name字段中以'st'为开头的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
查找name字段中以'ok'为结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
查找name字段中包含'mar'字符串的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';