美文网首页
第九章:用正则表达式进行搜索

第九章:用正则表达式进行搜索

作者: Demi_ec2a | 来源:发表于2020-08-25 14:33 被阅读0次

    正则表达式作用:这也就是正则表达式变得有用的地方。正则表达式是用来匹配文本的特殊的串(字符集合)。

    正则表达式是一个大合集,mysql支持的是一个子集。正则表达式详细的需要看另外的书。

    正则表达式举例:下面语句检索列name包含文本1000的所有行:

    select name from product 

    where name REGEXP '1000'

    order by name

    REGEXP后所跟的东西作为正则表达式(与文字正文1000匹配的一个正则表达式)处理。

    1、eg:select name from product 

    where name REGEXP '.000'

    order by name;

    这里使用了正则表达式.000。.是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符.

    注意:LIKE匹配整个列。如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不被返回(除非使用通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。这是一个非常重要的差别。

    那么,REGEXP能不能用来匹配整个列值(从而起与LIKE相同的作用)?答案是肯定的,使用^和$定位符(anchor)即可,本章后面介绍。

    注意:匹配不区分大小写MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大小写,可使用BINARY关键字,如WHERE prod_name REGEXPBINARY 'JetPack .000'。

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

    eg:select name from product 

    where name REGEXP '1000|2000'

    order by name;

    3、匹配几个字符之一--可通过指定一组用[和]括起来的字符来完成

    eg:select name from product 

    where name REGEXP '[123]TON'  ---意思是匹配1ton或者2ton或者3ton

    order by name;

    注意:事实上,正则表达式[123]Ton为[1|2|3]Ton的缩写,也可以使用后者。但是,需要用[]来定义OR语句查找什么。(告诉程序运算顺序)

    4、匹配范围:

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

    [0123456789]

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

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

    5、匹配特殊字符:

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

    为了匹配特殊字符,必须用\\为前导。\\-表示查找-,\\.表示查找.。

    eg:select name from product 

    where name REGEXP '\\.'

    order by name;

    6、匹配字存在找出你自己经常使用的数字、所有字母字符或所有数字字母字符等的匹配。为更方便工作,可以使用预定义的字符集,称为字符(character class)

    7、匹配多个实例

    目前为止使用的所有正则表达式都试图匹配单次出现。如果存在一个匹配,该行被检索出来,如果不存在,检索不出任何行。但有时需要对匹配的数目进行更强的控制。例如,你可能需要寻找所有的数,不管数中包含多少数字,或者你可能想寻找一个单词并且还能够适应一个尾随的s(如果存在),等等。

    这可以用表9-3列出的正则表达式重复元字符来完成。

    8、定位符

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

    注意:

    1、^的双重用途^有两种用法。在集合中(用[和]定义),用它来否定该集合,否则,用来指串的开始处。

    2、使REGEXP起类似LIKE的作用本章前面说过,LIKE和REGEXP的不同在于,LIKE匹配整个串而REGEXP匹配子串。利用定位符,通过用^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用与LIKE一样

    相关文章

      网友评论

          本文标题:第九章:用正则表达式进行搜索

          本文链接:https://www.haomeiwen.com/subject/teksjktx.html