English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MySQL 正則表達式

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.

SchemaDescrizione
^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|p3Corrisponde 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$';