zoukankan      html  css  js  c++  java
  • MySQL正则表达式

    正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较。

    MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据。

    MySQL仅支持多数正则表达式实现的一个很小的子集。

    ----------------------

    9.2.1  基本字符匹配

    REGEXP后所跟的东西作为正则表达式处理。

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000'
    ORDER BY prod_name;

    ------返回------
    +------------------------+
    |prod_name|
    +------------------------+
    |JetPack1000|
    +------------------------+
    复制代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000'
    ORDER BY prod_name;

    ------返回------
    +------------------------+
    |prod_name|
    +------------------------+
    |JetPack1000|
    +------------------------+
    复制代码

     

    .  表示匹配任意一个字符。

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'.000'
    ORDER BY prod_name;

    ------------返回-----------

    +-------------------------+
    |prod_name|
    +-------------------------+
    |JetPack1000|
    |JetPack2000|
    +-------------------------+
    复制代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'.000'
    ORDER BY prod_name;

    ------------返回-----------

    +-------------------------+
    |prod_name|
    +-------------------------+
    |JetPack1000|
    |JetPack2000|
    +-------------------------+
    复制代码

    MySQL中的正则表达式匹配不区分大小写。

    为区分大小写,可使用BINARY关键字。

    如:WHERE prod_name REGEXP BINARY 'JetPack .000'

    9.2.2  进行OR匹配

    为搜索两个串之一(或者这个串,或者为另一个串),使用 | 。

    | 作为OR操作符,表示匹配其中之一。可给出两个以上的OR条件。

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000 | 2000'
    ORDER BY prod_name;

    ------------返回------------

    +----------------------+
    |prod_name|
    +----------------------+
    |JetPack1000|
    |JetPack2000|
    +----------------------+
    复制代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000 | 2000'
    ORDER BY prod_name;

    ------------返回------------

    +----------------------+
    |prod_name|
    +----------------------+
    |JetPack1000|
    |JetPack2000|
    +----------------------+
    复制代码

    [ ] 匹配任何单一字符。

    [123]定义一组字符,意思是匹配1或2或3.

    [ ]是另外一种形式的OR语句,[123] Ton  就是  [1 | 2 | 3] Ton 的缩写。

    ^ 否定一个字符集合,将匹配除指定字符外的任何东西。[^123]将匹配除这些字符外的任何东西。

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'[123] Ton'
    ORDER BY prod_name;

    -------------返回------------

    +--------------------+
    |prod_name|
    +--------------------+
    |1ton anvil|
    |2ton anvil|
    +--------------------+

    匹配范围

    [0123456789] 或 [0-9] 将匹配数字0到9

    [a-z] 匹配任意字母符号

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'[1-5] Ton'
    ORDER BY prod_name;

    ----------返回-----------

    +-------------------+
    |prod_name|
    +-------------------+
    |.5ton anvil|
    |1ton anvil|
    |2ton anvil|
    +-------------------+

    匹配特殊字符

    \  为前导。即转义.正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

    \-  表示查找 -

    \.  表示查找 .

    SELECT prod_name
    FROM vendors
    WHERE vend_name REGEXP'\.'
    ORDER BY vend_name;

    -------------返回-------------

    +----------------------+
    |vend_name|
    +----------------------+
    |Furball Inc.|
    +----------------------+

    \  也用来引用元字符(具有特殊意义的字符)

    \f 换页
    \n 换行
    \r 回车
    \t 制表
    \v 纵向制表

    匹配字符类

    [:a;num:] 任意字母和数字(同 [a-zA-Z0-9])
    [:alpha:] 任意字符(同 [a-zA-Z])
    [:blank:] 空格和制表(同 [\t])
    [:cntrl:] ASCII控制字符(ASCII 0到31和127)
    [:digit:] 任意数字(同[0-9])
    [:graph:] 与["print:] 相同,但不包括空格
    [:lower:] 任意小写字线(同 [a-z])
    [:print:] 任意可打印字符
    [:punct:] 既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
    [space:] 包括空格在内的任意空白字符(同 [\f\n\t\r\v])
    [:upper:] 任意大小字母(同 [A-Z])
    [:xdigit:] 任意十六进制数字(同 [a-fA-F0-9])
    复制代码
    [:a;num:] 任意字母和数字(同 [a-zA-Z0-9])
    [:alpha:] 任意字符(同 [a-zA-Z])
    [:blank:] 空格和制表(同 [\t])
    [:cntrl:] ASCII控制字符(ASCII 0到31和127)
    [:digit:] 任意数字(同[0-9])
    [:graph:] 与["print:] 相同,但不包括空格
    [:lower:] 任意小写字线(同 [a-z])
    [:print:] 任意可打印字符
    [:punct:] 既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
    [space:] 包括空格在内的任意空白字符(同 [\f\n\t\r\v])
    [:upper:] 任意大小字母(同 [A-Z])
    [:xdigit:] 任意十六进制数字(同 [a-fA-F0-9])
    复制代码

    匹配多个实例

    元字符 说明
    *0个或多个匹配
    +1个或多个匹配(等于 {1, })
    ? 0个或1个匹配(等于 {0,1})
    {n} 指定数目的匹配
    {n, } 不少于指定数目的匹配
    {n ,m} 匹配数目的范围(m不超过255)
    复制代码
    元字符 说明
    *0个或多个匹配
    +1个或多个匹配(等于 {1, })
    ? 0个或1个匹配(等于 {0,1})
    {n} 指定数目的匹配
    {n, } 不少于指定数目的匹配
    {n ,m} 匹配数目的范围(m不超过255)
    复制代码

    以下例子:s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现。

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'\([0-9] sticks?\)'
    ORDER BY prod_name;

    ------------返回------------

    +-----------------------+
    |prod_name|
    +-----------------------+
    |TNT (1stick)|
    |TNT (5sticks)|
    +-----------------------+

    匹配连在一直的4位数字:WHERE prod_name REGEXP '[[:digit:]]{4}'

    定位符

    ^文本的开始
    $ 文本的末尾
    [[:<:]] 词的开始
    [[:>:]] 词的结尾
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'^[0-9\.]'
    ORDER BY prod_name;

    -----------返回----------

    +---------------------+
    |prod_name|
    +---------------------+
    |.5ton anvil|
    |1ton anvil|
    |2ton anvil|
    +---------------------+

    ^的双重用途:在集合中(用[ ]定义),用它来否定该集合。否则,用来指串的开始和。

    LIKE 匹配整个串,而REGEXP匹配子串。

        简单的正则表达式测试  可以在不使用数据库的情况下用SELECT来测试正则表达式。

        REGEXP检查总是返回0(没有匹配)或1(匹配),可以用带文字串的REGEXP来测

        试表达式,并试验它们。相应的语法如下:

            SELECT 'hello' REGEXP '[0-9]'

        这个例子返回0(因为文本hello中没有数字)。

    正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较。

    MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据。

    MySQL仅支持多数正则表达式实现的一个很小的子集。

    ----------------------

    9.2.1  基本字符匹配

    REGEXP后所跟的东西作为正则表达式处理。

    复制代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000'
    ORDER BY prod_name;

    ------返回------
    +------------------------+
    |prod_name|
    +------------------------+
    |JetPack1000|
    +------------------------+
    复制代码

     

    .  表示匹配任意一个字符。

    复制代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'.000'
    ORDER BY prod_name;

    ------------返回-----------

    +-------------------------+
    |prod_name|
    +-------------------------+
    |JetPack1000|
    |JetPack2000|
    +-------------------------+
    复制代码

    MySQL中的正则表达式匹配不区分大小写。

    为区分大小写,可使用BINARY关键字。

    如:WHERE prod_name REGEXP BINARY 'JetPack .000'

    9.2.2  进行OR匹配

    为搜索两个串之一(或者这个串,或者为另一个串),使用 | 。

    | 作为OR操作符,表示匹配其中之一。可给出两个以上的OR条件。

    复制代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000 | 2000'
    ORDER BY prod_name;

    ------------返回------------

    +----------------------+
    |prod_name|
    +----------------------+
    |JetPack1000|
    |JetPack2000|
    +----------------------+
    复制代码

    [ ] 匹配任何单一字符。

    [123]定义一组字符,意思是匹配1或2或3.

    [ ]是另外一种形式的OR语句,[123] Ton  就是  [1 | 2 | 3] Ton 的缩写。

    ^ 否定一个字符集合,将匹配除指定字符外的任何东西。[^123]将匹配除这些字符外的任何东西。

    代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'[123] Ton'
    ORDER BY prod_name;

    -------------返回------------

    +--------------------+
    |prod_name|
    +--------------------+
    |1ton anvil|
    |2ton anvil|
    +--------------------+

    匹配范围

    [0123456789] 或 [0-9] 将匹配数字0到9

    [a-z] 匹配任意字母符号

    代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'[1-5] Ton'
    ORDER BY prod_name;

    ----------返回-----------

    +-------------------+
    |prod_name|
    +-------------------+
    |.5ton anvil|
    |1ton anvil|
    |2ton anvil|
    +-------------------+

    匹配特殊字符

    \  为前导。即转义.正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

    \-  表示查找 -

    \.  表示查找 .

    代码
    SELECT prod_name
    FROM vendors
    WHERE vend_name REGEXP'\.'
    ORDER BY vend_name;

    -------------返回-------------

    +----------------------+
    |vend_name|
    +----------------------+
    |Furball Inc.|
    +----------------------+

    \  也用来引用元字符(具有特殊意义的字符)

    \f 换页
    \n 换行
    \r 回车
    \t 制表
    \v 纵向制表

    匹配字符类

    复制代码
    [:a;num:] 任意字母和数字(同 [a-zA-Z0-9])
    [:alpha:] 任意字符(同 [a-zA-Z])
    [:blank:] 空格和制表(同 [\t])
    [:cntrl:] ASCII控制字符(ASCII 0到31和127)
    [:digit:] 任意数字(同[0-9])
    [:graph:] 与["print:] 相同,但不包括空格
    [:lower:] 任意小写字线(同 [a-z])
    [:print:] 任意可打印字符
    [:punct:] 既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
    [space:] 包括空格在内的任意空白字符(同 [\f\n\t\r\v])
    [:upper:] 任意大小字母(同 [A-Z])
    [:xdigit:] 任意十六进制数字(同 [a-fA-F0-9])
    复制代码

    匹配多个实例

    复制代码
    元字符 说明
    *0个或多个匹配
    +1个或多个匹配(等于 {1, })
    ? 0个或1个匹配(等于 {0,1})
    {n} 指定数目的匹配
    {n, } 不少于指定数目的匹配
    {n ,m} 匹配数目的范围(m不超过255)
    复制代码

    以下例子:s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现。

    代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'\([0-9] sticks?\)'
    ORDER BY prod_name;

    ------------返回------------

    +-----------------------+
    |prod_name|
    +-----------------------+
    |TNT (1stick)|
    |TNT (5sticks)|
    +-----------------------+

    匹配连在一直的4位数字:WHERE prod_name REGEXP '[[:digit:]]{4}'

    定位符

    ^文本的开始
    $ 文本的末尾
    [[:<:]] 词的开始
    [[:>:]] 词的结尾
    代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'^[0-9\.]'
    ORDER BY prod_name;

    -----------返回----------

    +---------------------+
    |prod_name|
    +---------------------+
    |.5ton anvil|
    |1ton anvil|
    |2ton anvil|
    +---------------------+

    ^的双重用途:在集合中(用[ ]定义),用它来否定该集合。否则,用来指串的开始和。

    LIKE 匹配整个串,而REGEXP匹配子串。

        简单的正则表达式测试  可以在不使用数据库的情况下用SELECT来测试正则表达式。

        REGEXP检查总是返回0(没有匹配)或1(匹配),可以用带文字串的REGEXP来测

        试表达式,并试验它们。相应的语法如下:

            SELECT 'hello' REGEXP '[0-9]'

        这个例子返回0(因为文本hello中没有数字)。

    正则表达式作用是匹配方本,将一个模式(正则表达式)与一个文本串进行比较。

    MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据。

    MySQL仅支持多数正则表达式实现的一个很小的子集。

    ----------------------

    9.2.1  基本字符匹配

    REGEXP后所跟的东西作为正则表达式处理。

     SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000'
    ORDER BY prod_name;

    ------返回------
    +------------------------+
    |prod_name|
    +------------------------+
    |JetPack1000|
    +------------------------+
    复制代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000'
    ORDER BY prod_name;

    ------返回------
    +------------------------+
    |prod_name|
    +------------------------+
    |JetPack1000|
    +------------------------+
    复制代码

     

    .  表示匹配任意一个字符。

     
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'.000'
    ORDER BY prod_name;

    ------------返回-----------

    +-------------------------+
    |prod_name|
    +-------------------------+
    |JetPack1000|
    |JetPack2000|
    +-------------------------+
    复制代码
    复制代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'.000'
    ORDER BY prod_name;

    ------------返回-----------

    +-------------------------+
    |prod_name|
    +-------------------------+
    |JetPack1000|
    |JetPack2000|
    +-------------------------+
    复制代码

    MySQL中的正则表达式匹配不区分大小写。

    为区分大小写,可使用BINARY关键字。

    如:WHERE prod_name REGEXP BINARY 'JetPack .000'

    9.2.2  进行OR匹配

    为搜索两个串之一(或者这个串,或者为另一个串),使用 | 。

    | 作为OR操作符,表示匹配其中之一。可给出两个以上的OR条件。

     SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000 | 2000'
    ORDER BY prod_name;

    ------------返回------------

    +----------------------+
    |prod_name|
    +----------------------+
    |JetPack1000|
    |JetPack2000|
    +----------------------+
    复制代码
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'1000 | 2000'
    ORDER BY prod_name;

    ------------返回------------

    +----------------------+
    |prod_name|
    +----------------------+
    |JetPack1000|
    |JetPack2000|
    +----------------------+
    复制代码

    [ ] 匹配任何单一字符。

    [123]定义一组字符,意思是匹配1或2或3.

    [ ]是另外一种形式的OR语句,[123] Ton  就是  [1 | 2 | 3] Ton 的缩写。

    ^ 否定一个字符集合,将匹配除指定字符外的任何东西。[^123]将匹配除这些字符外的任何东西。

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'[123] Ton'
    ORDER BY prod_name;

    -------------返回------------

    +--------------------+
    |prod_name|
    +--------------------+
    |1ton anvil|
    |2ton anvil|
    +--------------------+

    匹配范围

    [0123456789] 或 [0-9] 将匹配数字0到9

    [a-z] 匹配任意字母符号

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'[1-5] Ton'
    ORDER BY prod_name;

    ----------返回-----------

    +-------------------+
    |prod_name|
    +-------------------+
    |.5ton anvil|
    |1ton anvil|
    |2ton anvil|
    +-------------------+

    匹配特殊字符

    \  为前导。即转义.正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

    \-  表示查找 -

    \.  表示查找 .

    SELECT prod_name
    FROM vendors
    WHERE vend_name REGEXP'\.'
    ORDER BY vend_name;

    \  也用来引用元字符(具有特殊意义的字符)

    \f 换页
    \n 换行
    \r 回车
    \t 制表
    \v 纵向制表

    匹配字符类

    [:a;num:] 任意字母和数字(同 [a-zA-Z0-9])
    [:alpha:] 任意字符(同 [a-zA-Z])
    [:blank:] 空格和制表(同 [\t])
    [:cntrl:] ASCII控制字符(ASCII 0到31和127)
    [:digit:] 任意数字(同[0-9])
    [:graph:] 与["print:] 相同,但不包括空格
    [:lower:] 任意小写字线(同 [a-z])
    [:print:] 任意可打印字符
    [:punct:] 既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
    [space:] 包括空格在内的任意空白字符(同 [\f\n\t\r\v])
    [:upper:] 任意大小字母(同 [A-Z])
    [:xdigit:] 任意十六进制数字(同 [a-fA-F0-9])
    复制代码
    [:a;num:] 任意字母和数字(同 [a-zA-Z0-9])
    [:alpha:] 任意字符(同 [a-zA-Z])
    [:blank:] 空格和制表(同 [\t])
    [:cntrl:] ASCII控制字符(ASCII 0到31和127)
    [:digit:] 任意数字(同[0-9])
    [:graph:] 与["print:] 相同,但不包括空格
    [:lower:] 任意小写字线(同 [a-z])
    [:print:] 任意可打印字符
    [:punct:] 既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
    [space:] 包括空格在内的任意空白字符(同 [\f\n\t\r\v])
    [:upper:] 任意大小字母(同 [A-Z])
    [:xdigit:] 任意十六进制数字(同 [a-fA-F0-9])
    复制代码

    匹配多个实例

    元字符 说明
    *0个或多个匹配
    +1个或多个匹配(等于 {1, })
    ? 0个或1个匹配(等于 {0,1})
    {n} 指定数目的匹配
    {n, } 不少于指定数目的匹配
    {n ,m} 匹配数目的范围(m不超过255)

    以下例子:s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现。

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'\([0-9] sticks?\)'
    ORDER BY prod_name;

    ------------返回------------

    +-----------------------+
    |prod_name|
    +-----------------------+
    |TNT (1stick)|
    |TNT (5sticks)|
    +-----------------------+

    匹配连在一直的4位数字:WHERE prod_name REGEXP '[[:digit:]]{4}'

    定位符

    ^文本的开始
    $ 文本的末尾
    [[:<:]] 词的开始
    [[:>:]] 词的结尾
    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP'^[0-9\.]'
    ORDER BY prod_name;

    -----------返回----------

    +---------------------+
    |prod_name|
    +---------------------+
    |.5ton anvil|
    |1ton anvil|
    |2ton anvil|
    +---------------------+

    ^的双重用途:在集合中(用[ ]定义),用它来否定该集合。否则,用来指串的开始和。

    LIKE 匹配整个串,而REGEXP匹配子串。

        简单的正则表达式测试  可以在不使用数据库的情况下用SELECT来测试正则表达式。

        REGEXP检查总是返回0(没有匹配)或1(匹配),可以用带文字串的REGEXP来测

        试表达式,并试验它们。相应的语法如下:

            SELECT 'hello' REGEXP '[0-9]'

        这个例子返回0(因为文本hello中没有数字)。

     

  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/myc618/p/4645044.html
Copyright © 2011-2022 走看看