zoukankan      html  css  js  c++  java
  • MySQL基础(六):用正则表达式进行搜索

    基本字符匹配


    我们从一个非常简单的例子开始。下面的语句检索列prod_name包含文本1000的所有行:

    输入

    SELECT prod_name
    FROM products
    WHERE prod_name REGEXP '1000';

    输出

    分析

    除关键字LIKE被REGEXP替代外,这条语句看上去非常像使用LIKE的语句(第8章)。它告诉MySQL:REGEXP后所跟的东西作 为正则表达式(与文字正文1000匹配的一个正则表达式)处理。

    进行OR匹配


    为搜索两个串之一(或者为这个串,或者为另一个串),使用|,如下所示:

    输入

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

    输出

    分析

    语句中使用了正则表达式1000|2000。|为正则表达式的OR操作 符。它表示匹配其中之一,因此1000和2000都匹配并返回。

    匹配几个字符之一


    匹配任何单一字符。但是,如果你只想匹配特定的字符,怎么办?可通过指定一组用[和]括起来的字符来完成,如下所示:

    输入

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

    输出

     

    分析

    这里,使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3,因此,1 ton和2 ton都匹配且返回(没有3 ton)。

    匹配范围


    集合可用来定义要匹配的一个或多个字符。例如,下面的集合将匹 配数字0到9:

    [0123456789]

    为简化这种类型的集合,可使用-来定义一个范围。下面的式子功能 上等同于上述数字列表:

    范围不限于完整的集合,[1-3]和[6-9]也是合法的范围。此外,范 围不一定只是数值的,[a-z]匹配任意字母字符。

    举一个例子:

    输入

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

    输出

    分析

    这里使用正则表达式[1-5] Ton。[1-5]定义了一个范围,这个表达式意思是匹配1到5,因此返回3个匹配行。由于5 ton匹配,所以返回.5 ton。

    匹配特殊字符


    正则表达式语言由具有特定含义的特殊字符构成。我们已经看到.、[]、 |和-等,还有其他一些字符。请问,如果你需要匹配这些字符,应该怎么 办呢?例如,如果要找出包含.字符的值,怎样搜索?请看下面的例子:

    输入

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

    输出

    分析

    这并不是期望的输出,.匹配任意字符,因此每个行都被检索出来。

    匹配字符类


    存在找出你自己经常使用的数字、所有字母字符或所有数字字母字符等的匹配。为更方便工作,可以使用预定义的字符集,称为字符类(character class)。表9-2列出字符类以及它们的含义。

    匹配多个实例


    目前为止使用的所有正则表达式都试图匹配单次出现。如果存在一 个匹配,该行被检索出来,如果不存在,检索不出任何行。

    但有时需要 对匹配的数目进行更强的控制。例如,你可能需要寻找所有的数,不管数中包含多少数字,或者你可能想寻找一个单词并且还能够适应一个尾随的s(如果存在),等等。

    定位符 


    目前为止的所有例子都是匹配一个串中任意位置的文本。为了匹配特定位置的文本,需要使用以下表中的定位符。

     

  • 相关阅读:
    jmeter(46) redis
    jmeter(45) tcp/ip协议
    Codeforces Round #538 (Div. 2)D(区间DP,思维)
    Codeforces Global Round 1D(DP,思维)
    Educational Codeforces Round 57D(DP,思维)
    UPC11073(DP,思维)
    Yahoo Progamming Contest 2019D(DP,思维)
    Atcoder Beginner Contest 118D(DP,完全背包,贪心)
    Xuzhou Winter Camp 1C(模拟)
    Educational Codeforces Round 57 (Rated for Div. 2)D(动态规划)
  • 原文地址:https://www.cnblogs.com/mxsf/p/12691241.html
Copyright © 2011-2022 走看看