10bet网址
MySQL 5.7参考手册
相关文件10bet官方网站 本手册下载 从本手册中摘录

12.8.2正则表达式

表12.14正则表达式函数和操作符

名称 描述
不正则表达式 否定regexp.
regexp. 字符串是否与正则表达式匹配
rlike. 字符串是否与正则表达式匹配

正则表达式是为复杂搜索指定模式的一种强大方法。本节讨论正则表达式匹配可用的操作符,并通过示例说明一些可用于正则表达式操作的特殊字符和结构。另请参阅第3.3.4.7节“模式匹配”

MySQL使用Henry Spencer的正则表达式实现,目的是符合POSIX 1003.2。MySQL使用扩展版本来支持SQL语句中的正则表达式模式匹配操作。这一节并不包含在亨利·斯宾塞的书中可以找到的所有细节RegEx(7)手动页面。该手册页包含在MySQL源分布中regex.7文件下的文件正则表达式目录。

正则表达式运算符

  • expr.不正则表达式帕特,expr.不是RLIKE帕特

    这与不是 (expr.regexp.帕特)

  • expr.regexp.帕特,expr.rlike.帕特

    如果字符串返回1expr.匹配模式指定的正则表达式帕特,否则为0。如果任何一expr.或者帕特空值,返回值是空值

    rlike.是一个同义词regexp.

    模式可以是扩展的正则表达式,讨论的语法正则表达式语法。模式不需要是字面值字符串。例如,它可以指定为字符串表达式或表列。

    请注意

    MySQL在字符串中使用C转义语法(例如,\ n表示换行符)。如果你想要expr.或者帕特包含文字的论点\,你必须加倍。(除非这是no_backslash_escapes.SQL模式已启用,在这种情况下,不使用转义字符。)

    在决定字符类型并执行比较时,正则表达式操作使用字符串表达式和模式参数的字符集和缩合。如果参数具有不同的字符集或归类,则胁迫规则适用如上所述第10.8.4节,“表达式中的排序强制性”。如果任一参数是二进制字符串,则参数以区分大小写的方式处理为二进制字符串。

    mysql>选择'michael!'regexp'。*';+ ---------------------- + |'迈克尔!'regexp'。*'|+ ---------------------- + |1 |+ ---------------------- + MySQL>选择'新* \ n *行'regexp'new \\ *。\\ * line';+ ---------------------------------- + |'新* \ n *行'regexp'new \\ *。\\ * line'| +---------------------------------------+ | 0 | +---------------------------------------+ mysql> SELECT 'a' REGEXP '^[a-d]'; +---------------------+ | 'a' REGEXP '^[a-d]' | +---------------------+ | 1 | +---------------------+ mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A'; +----------------+-----------------------+ | 'a' REGEXP 'A' | 'a' REGEXP BINARY 'A' | +----------------+-----------------------+ | 1 | 0 | +----------------+-----------------------+
    警告

    regexp.rlike.操作员以字节为单位的方式工作,因此它们不是Multibyyte Safe,并且可能会使用多字节字符集产生意外结果。此外,这些运算符通过其字节值进行比较字符,并且即使给定的排序规则将它们视为相等,则重音字符也可能不会与其相等。

正则表达式语法

正则表达式描述了一组字符串。最简单的正则表达式是其中没有特殊字符的正则表达式。例如,正则表达式你好火柴你好而不是别的。

非普通正则表达式使用特定的结构,以便它们可以匹配多个字符串。例如,正则表达式你好|世界包含|,并匹配你好或者世界

作为一个更复杂的例子,正则表达式B [AN] * s匹配任何字符串香蕉,Baaaaas.,废话以及以a开头的任何其他字符串B,结束了年代,并包含任何数量的一个或者n之间的人物。

的正则表达式regexp.操作员可以使用以下任何特殊字符和构造:

  • ^

    匹配字符串的开头。

    mysql> SELECT 'fo\nfo' REGEXP '^fo$';-> 0 mysql> SELECT 'fofo' REGEXP '^fo';- > 1
  • 美元

    匹配字符串的末尾。

    mysql>选择'fo \ no'regexp'^ fo \ no $';- > 1 mysql>选择'fo \ no'regexp'^ fo $';- > 0
  • 匹配任何字符(包括回车返回和换行符)。

    mysql> SELECT ` fofo ` REGEXP ` ^f.*$ `;-> 1 mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$';- > 1
  • 一种*

    匹配任何零个或多个序列一个人物。

    mysql>选择'禁止'regexp'^ ba * n';- > 1 mysql>选择'baaan'regexp'^ ba * n';- > 1 mysql>选择'bn'regexp'^ ba * n';- > 1
  • A +

    匹配一个或多个序列一个人物。

    mysql> SELECT 'Ban' REGEXP '^Ba+n';-> 1 mysql> SELECT 'Bn' REGEXP '^Ba+n';- > 0
  • 一种?

    匹配零或一个一个的性格。

    mysql>选择'bn'regexp'^ ba?n';- > 1 mysql>选择'禁止'regexp'^ ba?n';- > 1 mysql>选择'baan'regexp'^ ba?n';- > 0
  • DE | ABC.

    变更申请表;匹配任意一个序列或者美国广播公司

    mysql>选择'pi'regexp'pi | apa';- > 1 mysql>选择'ax'regexp'pi | apa';- > 0 mysql>选择'apa'regexp'pi | apa';- > 1 mysql>选择'apa'regexp'^(pi | apa)$';- > 1 mysql>选择'pi'regexp'^(pi | apa)$';- > 1 mysql>选择'pix'regexp'^(pi | apa)$';- > 0
  • (abc) *

    匹配零序列的零个或多个实例美国广播公司

    mysql> SELECT 'pi' REGEXP '^(pi)*$';-> 1 mysql> SELECT 'pip' REGEXP '^(pi)*$';-> 0 mysql> SELECT 'pipi' REGEXP '^(pi)*$';- > 1
  • {1},{2,3}

    重复;{n}{,n}符号提供了一种更通用的编写正则表达式的方式,可以匹配前面多次出现的原子(或一块)的模式。n都是整数。

    • 一种*

      可以写成一个{0,}

    • A +

      可以写成一个{1,}

    • 一种?

      可以写成一个{0,1}

    更准确地说,一个{n}完全匹配n的实例一个一个{n}火柴n或更多的实例一个一个{,n}火柴通过n的实例一个, 包括的。如果两者n给出,必须小于或等于n

    n必须在范围内0re_dup_max.255(默认)、包容。

    mysql> SELECT 'abcde' REGEXP 'a[bcd]{2}e';-> 0 mysql> SELECT 'abcde' REGEXP 'a[bcd]{3}e';-> 1 mysql> SELECT 'abcde' REGEXP 'a[bcd]{1,10}e';- > 1
  • [A-DX],[^ a-dx]

    匹配任何符合(或不符合)的字符^是使用)一个,b,c,d或者X。一个-另外两个字符之间的字符形成与第一个字符与第二个字符的所有字符匹配的范围。例如,[0-9]匹配任何十进制数字。包含一个文字]字符,它必须立即跟随左括号(。包含一个文字-性格,它必须先写写。任何在a内没有定义的特殊含义的字符[]对仅匹配自己。

    mysql>选择'axbc'regexp'[a-dxyz]';- > 1 mysql>选择'axbc'regexp'^ [a-dxyz] $';- > 0 mysql>选择'axbc'regexp'^ [a-dxyz] + $';- > 1 mysql>选择'axbc'regexp'^ [^ a-dxyz] + $';- > 0 mysql>选择'gheis'regexp'^ [^ a-dxyz] + $';- > 1 mysql>选择'gheisa'regexp'^ [^ a-dxyz] + $';- > 0
  • [。人物。]

    在括号表达式中(使用写作(]),匹配该排序元素的字符序列。字符是一个字符或字符名称新队。下表列出了允许的字符名称。

    下表显示了允许的字符名称和它们匹配的字符。对于以数值形式给出的字符,值用八进制表示。

    名称 特点 名称 特点
    NUL. 0 001
    STX. 002 ETX. 003
    测试结束 004 询问 005
    006 贝尔 007
    警报 007 废话 010
    退格 '\ b' HT 011
    标签 '\ t' 如果 012.
    新队 '\ n' vt. 013
    垂直标签 '\ v' FF 014.
    换页 “\ f” CR 015.
    回车 '\ r' 所以 016.
    SI. 017. DLE 020
    DC1. 021. DC2. 022.
    DC3. 023. DC4. 024.
    钠钾共晶合金 025. syn 026.
    etb. 027. 能够 030.
    新兴市场 031. 032.
    退出 033. IS4 034.
    FS 034. IS3 035.
    GS 035. IS2 036.
    卢比 036. IS1 037.
    我们 037. 空间 ''
    感叹号 '!' 引号 '“'
    数字符号 '#' 美元符号 '$'
    百分号 '%' & '&'
    撇号 ”\ 左括号 '('
    右括号 ')' 星号 '*'
    加号 '+' 逗号 ','
    hy “- - -” hy hy减去 “- - -”
    “。” 全站星 “。”
    削减 ' / ' 固相 ' / '
    ' 0 ' ' 1 '
    ' 2 ' “3”
    四个 “4” “5”
    六个 “6” “7”
    '8' 九个 '9'
    冒号 ':' 分号 ';'
    小于号 '<' 等于标志 '='
    大于签名 '>' 问号 '?'
    商业at. '@' left-square-bracket '['
    反斜杠 '\\' 反向固定 '\\'
    右平方括号 ']' 环形 '^'
    Conceplylex重点 '^' 下划线 '_'
    低线 '_' 沉音符 '''
    左括号 '{' 左卷括号 '{'
    垂直线 '|' 右支架 '}'
    right-curly-bracket '}' 折叠 '〜'
    del 177.
    mysql>选择'〜'regexp'[[。〜。]';- > 1 mysql>选择'〜'regexp'[[.tilde。]'';- > 1
  • (= character_class =)

    在括号表达式中(使用写作(]),(= character_class =)代表一个等价类。它与具有相同的排序规则值的所有字符匹配,包括本身。例如,如果o(+)是等同类的成员,[[= o =]],[[= (+) =]], 和[o(+)]都是同义的。等效类不能用作范围的端点。

  • (character_class:)

    在括号表达式中(使用写作(]),(character_class:)表示与属于该类的所有字符匹配的字符类。下表列出了标准类名。这些名称代表了所定义的字符类ctype (3)手动页面。特定区域设置可以提供其他类名。字符类可能不会被用作范围的终点。

    字符类名 意义
    alnum. 字母数字字符
    α 字母字符
    空白 空格字符
    cntrl 控制字符
    数字 数字字符
    图形字符
    较低的 小写字母字符
    打印 图形或空间字符
    标准 标点符号
    空间 空格、制表符、换行符和回车符
    大写字母字符
    XDIGIT. 十六进制字符
    mysql>选择'justalnums'regexp'[[:Alnum:]] +';- > 1 mysql>选择'!!'Regexp'[[:Alnum:]] +';- > 0
  • [[:<:]],[[: >:]]

    这些标志代表了单词边界。它们分别与单词的开头和结尾匹配。单词是一系列单词字符,其未在Word字符之外或之后。一个单词字符是一个字母数字字符alnum.课程或下划线(_)。

    mysql >选择“一个词“正则表达式”[[:<:]][[:>:]]”;- > 1 mysql >选择“xword REGEXP的[[:<:]]词[[:>:]]';- > 0

要在正则表达式中使用特殊字符的文字实例,请在两个反斜杠(\)字符之前。MySQL解析器解释一个反斜杠,正则表达式库解释另一个。例如,匹配字符串1 + 2包含特殊的+字符,只有下面的正则表达式的最后一个是正确的:

MySQL>选择'1 + 2'Regexp'1 + 2';- > 0 mysql>选择'1 + 2'regexp'1 \ +2';- > 0 mysql>选择'1 + 2'Regexp'1 \\ + 2';- > 1