📜  MySQL |正则表达式 (Regexp)

📅  最后修改于: 2021-09-10 02:15:05             🧑  作者: Mango

MySQL 支持另一种基于正则表达式和 REGEXP运算符的模式匹配操作。

  1. 它提供了强大而灵活的模式匹配,可以帮助我们为我们的数据库系统实现电源搜索实用程序。
  2. REGEXP 是执行正则表达式模式匹配时使用的运算符。 RLIKE 是同义词。
  3. 它还支持许多元字符,在执行模式匹配时允许更多的灵活性和控制。
  4. 反斜杠用作转义字符。如果使用了双反斜杠,则仅在模式匹配中考虑它。
  5. 不区分大小写。
Pattern What the Pattern matches
* Zero or more instances of string preceding it
+ One or more instances of strings preceding it
. Any single character
? Match zero or one instances of the strings preceding it.
^ caret(^) matches Beginning of string
$ End of string
[abc] Any character listed between the square brackets
[^abc] Any character not listed between the square brackets
[A-Z] match any upper case letter.
[a-z] match any lower case letter
[0-9] match any digit from 0 through to 9.
[[:<:]] matches the beginning of words.
[[:>:]] matches the end of words.
[:class:] matches a character class i.e. [:alpha:] to match letters, [:space:] to match white space, [:punct:] is match punctuations and [:upper:] for upper class letters.
p1|p2|p3 Alternation; matches any of the patterns p1, p2, or p3
{n} n instances of preceding element
{m,n} m through n instances of preceding element

举例说明:

  • 匹配字符串的开头 (^):
    给出所有以“sa”开头的名称。例如-sam,samart。
    SELECT name FROM student_tbl WHERE name REGEXP '^sa';
    
  • 匹配字符串($):
    给出所有以“on”结尾的名称。例如——norton、merton。

    SELECT name FROM student_tbl WHERE name REGEXP 'on$';
    
  • 匹配它前面的字符串的零个或一个实例(?):
    给出所有包含 ‘com’ 的标题。示例 – 喜剧、浪漫喜剧。
    SELECT title FROM movies_tbl WHERE title REGEXP 'com?'; 
    
  • 匹配任何模式 p1、p2 或 p3(p1|p2|p3):
    给出所有包含 ‘be’ 或 ‘ae’ 的名称。例如 – Abel、Baer。
    SELECT name FROM student_tbl WHERE name REGEXP 'be|ae' ;
    
  • 匹配方括号 ([abc]) 之间列出的任何字符:
    给出所有包含 ‘j’ 或 ‘z’ 的名称。示例 – Lorentz、Rajs。
    SELECT name FROM student_tbl WHERE name REGEXP '[jz]' ;
    
  • 匹配 ‘a’ 到 ‘z’- ([az]) ([az] 和 (.)) 之间的任何小写字母:
    检索所有包含 ‘b’ 和 ‘g’ 范围内的字母,后跟任意字符,后跟字母 ‘a’ 的所有名称。示例 – Tobias, sewall。

    匹配任何单个字符(.)

    SELECT name FROM student_tbl WHERE name REGEXP '[b-g].[a]' ;
    
  • 匹配方括号之间未列出的任何字符。([^abc]):
    给出所有不包含 ‘j’ 或 ‘z’ 的名称。示例 – nerton、sewall。
    SELECT name FROM student_tbl WHERE name REGEXP '[^jz]' ;
    
  • 匹配单词 [[:>:]] 的结尾:
    给出所有以字符“ack”结尾的标题。示例 – 黑色。
    SELECT title FROM movies_tbl WHERE REGEXP 'ack[[:>:]]'; 
    
  • 匹配单词[[:<:]]的开头:
    给出所有以字符“for”开头的标题。示例——忘记莎拉·马歇尔。
    SELECT title FROM movies_tbl WHERE title REGEXP '[[:<:]]for'; 
    
  • 匹配字符类[:class:]:
    即 [:lower:]- 小写字符,[:digit:] – 数字字符等。
    给出所有仅包含字母字符的标题。例如 – 奇怪的事情,复仇者联盟。
    SELECT title FROM movies_tbl WHERE REGEXP '[:alpha:]' ;