精华内容
下载资源
问答
  • mysql regexp用法
    2021-01-18 21:49:51

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

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

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

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

    1、基本字符匹配

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

    SELECT prod_name

    FROM products

    WHERE prod_name REGEXP '1000'

    ORDER BY prod_name;

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

    +------------------------+

    | prod_name |

    +------------------------+

    | JetPack 1000 |

    +------------------------+

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

    SELECT prod_name

    FROM products

    WHERE prod_name REGEXP '.000'

    ORDER BY prod_name;

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

    +-------------------------+

    | prod_name |

    +-------------------------+

    | JetPack 1000 |

    | JetPack 2000 |

    +-------------------------+

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

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

    如:WHERE prod_name REGEXP BINARY 'JetPack .000'

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

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

    SELECT prod_name

    FROM products

    WHERE prod_name REGEXP '1000 | 2000'

    ORDER BY prod_name;

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

    +----------------------+

    | prod_name |

    +----------------------+

    | JetPack 1000 |

    | JetPack 2000 |

    +----------------------+

    [ ] 匹配任何单一字符。

    [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 |

    +--------------------+

    | 1 ton anvil |

    | 2 ton 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 |

    +-------------------+

    | .5 ton anvil |

    | 1 ton anvil |

    | 2 ton 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 (1 stick) |

    | TNT (5 sticks) |

    +-----------------------+

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

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

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

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

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

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

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

    更多相关内容
  • 本文通过实例代码给大家详细介绍这两者的使用方法,下面来跟着小编一起学习学习吧。 like模式 like意思是长得像,有两个模式:_和% _表示单个字符,通常用来查询定长的数据,如查出所有姓王的三个字的人名,假设姓...
  • 主要介绍了Mysql中正则表达式Regexp常见用法MySql REGEXP运算符匹配字符串,mysql正则REGEXP学习练习笔记,需要的朋友可以参考下
  • Mysql语句使用regexp用法与案例

    Mysql语句的RegExp的用法与案例

    一、RegExp基本语法

    1. JavaScript RegExp 参考手册
    2. MySQL REGEXP:正则表达式查询
    3. MySQL中REGEXP正则表达式使用大全

    字符描述
    ^从开始行开始匹配
    $从末端行开始匹配
    .匹配任意单个字符除了换行符
    [ ][ ] 内为字符集,匹配 [ ] 内任一字符
    [^ ]匹配除了方括号里的任意字符
    *匹配零个或多个在它前面的字 符
    +匹配前面的字符 1 次或多次
    ?匹配 0 或 1 个 ?号前的字符。
    {n,m}匹配前面的字符串至少 n 次, 至多 m 次
    (xyz)匹配与 xyz 完全相等的字符串
    \s匹配任意单个字符除了换行符
    \转义字符,匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \
    [.characters.]  在括号表达式中(使用[]),匹配用于校对元素的字符序列,字符为单个字符或新行等字符名
    
    mysql> SELECT ‘~’ REGEXP ‘[[.~.]];                                                        -> 1
    
    mysql> SELECT ‘~’ REGEXP ‘[[.tilde.]];                                                 -> 1
    
     
    
    [=character_class=]
    
    在括号表达式中(使用[]),[=character_class=]表示等同类。它与具有相同校对值的所有字符匹配,包括它本身,
    
    [[=a=]]              等同于[a(+)],[a+],[a{1,}]
    
     
    
    [:character_class:]
    
    在括号表达式中(使用[]),[:character_class:]表示与术语类的所有字符匹配的字符类。
    
    标准的类名称是:
    
    alnum 		文字数字字符
    
    alpha		文字字符
    
    blank		空白字符
    
    cntrl		控制字符
    
    digit		数字字符
    
    graph		图形字符
    
    lower		小写文字字符
    
    print		图形或空格字符
    
    punct		标点字符
    
    space		空格、制表符、新行、和回车
    
    upper		大写文字字符
    
    xdigit		十六进制数字字符
    
    [[:<:]], [[:>:]]		
    这些标记表示word边界,它们分别与word的开始和结束匹配
    word是一系列字字符,其前面和后面均没有字字符。字符是alnum类中的字母数字字符或下划线(_)
    

    二、Mysql使用RegExp案例

    案例1:在json数据里面,找到class_detail_students_id这个字段,并且数据包含学生编号“58888828”

    思路:
    在这个数据 -> {"class_id":2,"class_detail_students_id":",58888881,58888828,58888881,"}
    需要查找 -> class_detail_students_id 这个字段
    并查看 -> ,58888881,58888828,58888881, 里面是否包含58888828
    注意点:数据里面有双引号,这是regexp数据可以用单引号包围,里面的双引号用\\转义
    
    匹配规则regexp ==>'(\\"class_detail_students_id\\")(:\\")[(0-9)|,]*(,58888828,)[(0-9)|,]*(\\")'
    
    
    解答完整的sql:
    select * from mole_class_detail_change where 
    current_value regexp '(\\"class_detail_students_id\\")(:\\")[(0-9)|,]*(,58888828,)[(0-9)|,]*(\\")'
    

    在这里插入图片描述

    案例2:匹配000000002 _ _ _ _ _ _ _ _ 1900 和 000000003 _ _ _ _ _ _ _ _1700,其中"__" 这是8个空位,只能是数字

    思路:
    这是两个字符串,都空出中间8为数字,可以用"()"
    (000000002) -> 匹配  "000000002"
    [[:digit:]] -> 匹配  数字字符
    {8}			-> 匹配前一个括号里面8次
    |			-> 或的意思
    
    
    解答完整的sql:
    select * from mole_class_detail_change 
    where class_detail_code regexp '((000000002)([[:digit:]]{8})(1900))|((000000003)([[:digit:]]{8})(1700))'
    

    案例3:每个用户有多个身份权限,查询用户同时有a、b 、 c 权限的用户
    在这里插入图片描述

    上方截图展示了表数据 和分组查询的结果
    .	->	匹配任意单个字符除了换行符
    *	->	匹配零个或多个在它前面的字符
    +	->	匹配1个或多个在它前面的字符
    [abc]	->	匹配a/b/c里面的一个字符
    [,|,.+,]	-> 	匹配','(逗号) 或者 ',abcfdg等等,'(逗号包围的数据)
    
    
    匹配规则regexp	==>	 '.*,[abc][,|(,.+,)][abc][,|(,.+,)][abc][,|(,.+,)]'
    
    
    解答完整的sql:
    select user_id,concat(',',GROUP_CONCAT(DISTINCT role_id),',') as group_role from test GROUP BY user_id 
    having group_role regexp '.*,[abc][,|(,.+,)][abc][,|(,.+,)][abc][,|(,.+,)]'
    

    在这里插入图片描述

    展开全文
  • 以前我要查找数据都是使用like后来发现mysql中也有正则表达式了并且感觉性能要好于like,下面我来给大家分享一下mysql REGEXP正则表达式使用详解,希望此方法对大家有帮助。 MySQL采用Henry Spencer的正则表达式实施...
  • MySQL提供标准的SQL模式匹配(like),以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式(regexp)。 SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)...
  • mysql 中查询语句表达式REGEXP用法

    千次阅读 2021-02-02 03:29:29
    mysql 中用REGEXP字符来匹配表达式用法: 属性名有如下表:table employee+—–+——+———–+——+——+——————–+| num | d_id | name | age | sex | homeaddress |+—–+——+———–+——+——+————...

    mysql 中用REGEXP字符来匹配表达式

    用法: 属性名

    有如下表:

    table employee

    +—–+——+———–+——+——+——————–+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+———–+——+——+——————–+

    | 1 | 1001 | 张三 | 26 | 男 | 北京海淀区 |

    | 2 | 1001 | 李四 | 24 | 女 | 北京昌平区 |

    | 3 | 1002 | 王五 | 25 | 男 | 湖南长沙市 |

    | 4 | 1004 | Aric | 15 | 男 | England |

    | 5 | 1999 | 李三思 | 17 | 男 | 海南省三亚市 |

    +—–+——+———–+——+——+——————–+

    1.查以特定字符或字符串开头的记录:

    使用”^”

    select * from employee where homeaddress REGEXP '^北京';

    查询结果如下:

    +—–+——+——–+——+——+—————–+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+——–+——+——+—————–+

    | 1 | 1001 | 张三 | 26 | 男 | 北京海淀区 |

    | 2 | 1001 | 李四 | 24 | 女 | 北京昌平区 |

    +—–+——+——–+——+——+—————–+

    2.查询以特定字符或字符串结尾的记录:

    用法:’字符或字符串$’

    select * from employee where homeaddress regexp '市$';

    结果如下:

    +—–+——+———–+——+——+——————–+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+———–+——+——+——————–+

    | 3 | 1002 | 王五 | 25 | 男 | 湖南长沙市 |

    | 5 | 1999 | 李三思 | 17 | 男 | 海南省三亚市 |

    +—–+——+———–+——+——+——————–+

    3.用‘.’可以代替字符串中的任意字符:

    用法如下:

    select * from employee where name regexp '.五';

    select * from employee where name regexp '李..思';

    #经过摸索,我发现在中间的汉,需要用两个.代替。

    #3.1.插入提条记录如下:

    insert into employee values(null,1898,'lily','女','HaiNanSanya');

    #3.2.查询lily

    select * from employee where name regexp 'l.ly';

    3.1.结果如下:

    +—–+——+——–+——+——+—————–+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+——–+——+——+—————–+

    | 3 | 1002 | 王五 | 25 | 男 | 湖南长沙市 |

    +—–+——+——–+——+——+—————–+

    1 row in set (0.00 sec)

    3.2.

    +—–+——+——+——+——+————-+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+——+——+——+————-+

    | 6 | 1898 | lily | 18 | 女 | HaiNanSanya |

    +—–+——+——+——+——+————-+

    1 row in set (0.00 sec)

    4.匹配指定字符串中任意一个

    用法:[ ]

    select * from employee where name regexp '[五l三]';

    结果:+—–+——+———–+——+——+——————–+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+———–+——+——+——————–+

    | 1 | 1001 | 张三 | 26 | 男 | 北京海淀区 |

    | 3 | 1002 | 王五 | 25 | 男 | 湖南长沙市 |

    | 5 | 1999 | 李三思 | 17 | 男 | 海南省三亚市 |

    | 6 | 1898 | lily | 18 | 女 | HaiNanSanya |

    +—–+——+———–+——+——+——————–+

    4 rows in set (0.00 sec)

    5.搜索制定区间

    用法:[]

    select * from employee where num regexp '[1-5]';

    #查找num在1-5之间的记录

    结果如下:

    +—–+——+———–+——+——+——————–+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+———–+——+——+——————–+

    | 1 | 1001 | 张三 | 26 | 男 | 北京海淀区 |

    | 2 | 1001 | 李四 | 24 | 女 | 北京昌平区 |

    | 3 | 1002 | 王五 | 25 | 男 | 湖南长沙市 |

    | 4 | 1004 | Aric | 15 | 男 | England |

    | 5 | 1999 | 李三思 | 17 | 男 | 海南省三亚市 |

    +—–+——+———–+——+——+——————–+

    5 rows in set (0.01 sec)

    6.搜索制定区间之外的记录:

    用法:[^1-5]

    select * from employee where num regexp '[^1-5]';

    结果如下:

    +—–+——+——+——+——+————-+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+——+——+——+————-+

    | 6 | 1898 | lily | 18 | 女 | HaiNanSanya |

    +—–+——+——+——+——+————-+

    7.查询指定字符串

    #查询homeaddress在三亚市的记录

    select * from employee where homeaddress regexp '三亚市';

    结果如下:

    +—–+——+———–+——+——+——————–+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+———–+——+——+——————–+

    | 5 | 1999 | 李三思 | 17 | 男 | 海南省三亚市 |

    +—–+——+———–+——+——+——————–+

    1 row in set (0.01 sec)

    #查询三亚、长沙、昌平中的任意一个

    select * from employee where homeadress regexp '三亚|长沙|昌平';

    结果如下:

    +—–+——+———–+——+——+——————–+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+———–+——+——+——————–+

    | 2 | 1001 | 李四 | 24 | 女 | 北京昌平区 |

    | 3 | 1002 | 王五 | 25 | 男 | 湖南长沙市 |

    | 5 | 1999 | 李三思 | 17 | 男 | 海南省三亚市 |

    +—–+——+———–+——+——+——————–+

    3 rows in set (0.00 sec)

    8.用×和+来匹配多个字符:

    select * from employee where name regexp 'l*y';

    #表示查寻name 下字母y前面有0个或多个l

    +—–+——+——+——+——+————-+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+——+——+——+————-+

    | 6 | 1898 | lily | 18 | 女 | HaiNanSanya |

    +—–+——+——+——+——+————-+

    1 row in set (0.01 sec)

    select * from employee where name regexp 'l+y';

    #表示查询字母y前面至少有一个l

    结果:

    +—–+——+——+——+——+————-+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+——+——+——+————-+

    | 6 | 1898 | lily | 18 | 女 | HaiNanSanya |

    +—–+——+——+——+——+————-+

    1 row in set (0.01 sec)

    select * from employee where name regexp 'a+y';

    #表示查询字母y前面至少有一个a

    结果:

    mysql> select * from employee where name regexp ‘a+y’;

    Empty set (0.00 sec)

    9.按照指定字符出现的次数 查询

    #先插一条记录

    insert into employee values (null,1880,'aaaccsd',28,'女','America');

    #查询如下:

    select * from employee where name regexp 'a{3}';

    结果:

    +—–+——+———+——+——+————-+

    | num | d_id | name | age | sex | homeaddress |

    +—–+——+———+——+——+————-+

    | 7 | 1880 | aaaccsd | 28 | 女 | America |

    +—–+——+———+——+——+————-+

    展开全文
  • mysql中实现模糊查询的有like和regexp。 ———————— like的用法许多人都是知道的,最为常用的情况就是select * from a where name like ‘%a%’; 其中’%’代表的是任意个字符,它的效果像是正则表达式里的...
  • mysql数据库中replace、regexp用法,主要是通过sql语句实现数据的替换,使用mysql的朋友可以参考下。
  • MysqlRegexp常见用法

    千次阅读 2021-06-16 16:38:44
    MysqlRegexp常见用法 模糊匹配,包含特定字符串 查找content字段中包含“车友俱乐部”的记录 select * from club_content where content regexp ‘车友俱乐部’ 此时的regexp与like的以下用法是等同的 select * ...

    Mysql中Regexp常见用法

    模糊匹配,包含特定字符串

    查找content字段中包含“车友俱乐部”的记录

    select * from club_content where content regexp ‘车友俱乐部’

    此时的regexp与like的以下用法是等同的

    select * from club_content where content like ‘%车友俱乐部%’

    模糊匹配,以特定字符串开头

    查找content字段中以“车友”开头的记录

    select * from club_content where content regexp ‘^车友’

    此时的regexp与like的以下用法是等同的

    select * from club_content where content like ‘车友%’

    模糊匹配,以特定字符串结尾

    查找content字段中以“车友”结尾的记录

    select * from club_content where content regexp ‘车友$’

    此时的regexp与like的以下用法是等同的

    select * from club_content where content like ‘%车友’

    模糊匹配,或关系

    查找content字段中包含“心得”、“分享”或“技术贴”

    select * from club_content where content REGEXP ‘心得|分享|技术贴’

    模糊匹配,不包含单个字符

    查找content字段中不包含“车”字、“友”字的记录

    select * from club_content where content REGEXP [^车友]

    这个结果跑出来一看大吃一惊,竟然把所有记录给跑出来,这是为什么呢?
    因为一旦加了这个方括号"[]",它就把里面的内容拆成单个的字符再匹配,它会逐个字符去匹配判断是不是等于“车”,或者是不是等于“友“,返回的结果是一组0、1的逻辑值。

    如果想匹配不包含特定字符串,该怎么实现呢?

    模糊匹配,不包含特定字符串

    查找content字段不包含“车友”字符串的记录

    select * from club_content where content not REGEXP ‘车友’

    MySql REGEXP运算符匹配字符串

    1 ^ 匹配以该字符后面的字符开头的字符串
    举个例子: REGEXP ‘^x’ 表示匹配以x开头的字符
    2 匹 配 以 该 字 符 前 面 的 字 符 结 尾 的 字 符 串 举 个 例 子 : R E G E X P ‘ y 匹配以该字符前面的字符结尾的字符串 举个例子: REGEXP ‘y REGEXPy’ 表示匹配以y结尾的字符
    3 .匹配任意一个字符
    4 […]匹配在方括号中的任意一个字符。
    如: [1-9] 匹配1到9的数字, [abc]匹配其中任意一个
    5 匹配零个或多个在它前面的字符
    如: x
    匹配任何数量的x字符
    mysql 如何判断 “字符串” 是否为 “数字”

    这个问题有点怪 ,但很多时候我们会以字符串的形式存储数字 , 反过来我们用字符串进行数学运算时, 好像也不会出错 . 除非 , 用作数学运算的字符串不能转换成数字 .
    但是我们改如何判断字符串是否能转换成数字呢 ?

    采用mysql的 REGEXP运算符 . 怎么用?

    {String} REGEXP ‘[^0-9.]’

    前面的字符串是我们要做判断的, 后面的字符串是mysql的正则表达式,意思是 匹配不是数字或者小数点的字符。

    如果String中含有不是0-9之间的数字或者是小数点时,返回true ,反之则返回false。

    比如说 :

    select (‘123a’ REGEXP ‘[^0-9.]’); --‘123a’中含有字符’a’ 输出结果为1 mysql中常量true输出为1 false输出为0

    注意:如果字符串中有空格,也会匹配到正则表达式,返回1。如果是要去掉两端的空格,就要将判断的字符串,就要对字符串使用 trim()函数了。

    这个只是REGEXP操作符的简单应用,REGEXP的详细应用请参考官方文档。 
    MySQL 正则表达式

    在前面的章节我们已经了解到MySQL可以通过 LIKE …% 来进行模糊匹配。

    MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。

    如果您了解PHP或Perl,那么操作起来就非常简单,因为MySQL的正则表达式匹配与这些脚本的类似。

    下表中的正则模式可应用于 REGEXP 操作符中。

    模式 描述
    ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
    $ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
    . 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
    […] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
    [^…] 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。
    p1|p2|p3 匹配 p1 或 p2 或 p3。例如,‘z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。

    • 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
    • 匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
      {n} n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
      {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
      实例

    了解以上的正则需求后,我们就可以根据自己的需求来编写带有正则表达式的SQL语句。以下我们将列出几个小实例(表名:person_tbl )来加深我们的理解:

    查找name字段中以’st’为开头的所有数据:

    mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘^st’;

    查找name字段中以’ok’为结尾的所有数据:

    mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘ok$’;

    查找name字段中包含’mar’字符串的所有数据:

    mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘mar’;

    查找name字段中以元音字符开头或以’ok’字符串结尾的所有数据:

    mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘1|ok$’;

    mysql正则REGEXP学习练习笔记

    REGEXP在mysql是用来执行正则表达式的一个函数,像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使用like即可,但复杂的还是需要使用regexp了,下面我们来看看。

    MySql用户手册建议,在构造简单查询时,仍使用通配符。

    如:

    Select [*|fieldname list] From [tablename] where [fieldname] like ["%someletter"|"%someletter%","_","?someletter"];

    但在一些特殊查询中,不用正则表达式是不行的。MYSQL提供的正则表达式WHERE谓词有三个,分别是:

    REGEXP, RLIKE, NOT RLIKE

    用这三个替换原有的LIKE谓词,后面即可以跟正则表达式。
    例如要查询字段中含有“_”的数据,则要用以下查询语句:

    SELECT * FROM TABLENAME WHERE FIELDNAME RLIKE ‘.[_].’;

    扩展正则表达式的一些字符是:

    · ‘.'匹配任何单个的字符。
    · 字符类“[…]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
    · “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]”匹配任何数量的数字,而“.”匹配任何数量的任何字符。
    如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
    为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
    为了找出以“b”开头的名字,使用“^”匹配名字的开始:
    使用正则

    SELECT * FROM pet WHERE name REGEXP BINARY ‘^b’;
    SELECT * FROM pet WHERE name REGEXP ‘fy ′ ; S E L E C T ∗ F R O M p e t W H E R E n a m e R E G E X P ‘ w ′ ; S E L E C T ∗ F R O M p e t W H E R E n a m e R E G E X P ‘ … . . '; SELECT * FROM pet WHERE name REGEXP ‘w'; SELECT * FROM pet WHERE name REGEXP ‘^….. ;SELECTFROMpetWHEREnameREGEXPw;SELECTFROMpetWHEREnameREGEXP..’;
    SELECT * FROM pet WHERE name REGEXP ‘^.{5}$’;


    1. aeiou ↩︎

    展开全文
  • MySQL REGEXP正则表达式

    2021-01-19 07:15:59
    select * from persons WHERE City REGEXP '[b]eijing' SQLite不支持Regexp正则方法。 (^)字符 匹配字符串的开始位置,如“^a”表示以字母a开头的字符串。 mysql>SELECT name FROM person_tblWHERE name REGEXP ...
  • 本文实例讲述了MySQL使用replace、regexp进行正则表达式替换的用法。分享给大家供大家参考,具体如下: 今天一个朋友问我,如果将数据库中查到的类似于“./uploads/110100_cityHotel_北京富豪华宾馆.jpg”这样的...
  • mysqlregexp_like函数的用法

    千次阅读 2021-01-27 09:58:03
    mysqlregexp_like函数的用法发布时间:2020-05-06 15:12:47来源:亿速云阅读:316作者:三月下文主要给大家带来mysqlregexp_like函数的用法,希望mysqlregexp_like函数的用法能够带给大家实际用处,这也是我...
  • MySQLregexp_replace

    2021-07-31 14:13:50
    regexp_replace(source, pattern, replace_string, occurrence) 参数说明: ● source: string类型,要替换的原始字符串。 ● pattern: string类型常量,要匹配的正则模式,pattern为空串时抛异常。 ● replace_...
  • 我有一个问题:SELECT * from arrc_Voucher WHERE VoucherNbr REGEXP "^1002"这很有效 – VoucherNbr是一个16个字符的代码,此查询查找前四位数为1002的所有记录.现在我需要扩展它,我对正则表达式不是很好.我需要能够...
  • 在开始这个话题之前我们首先来做一个小实验,比较一下REGEXP和Like他们两个哪个效率高,如果效率太低,我们就没有必要做过多的研究了,实验的代码如下:Require("config.php");//函数:计时函数//用法:Echo Runtime(1);...
  • replace、regexp用法0 Comments | This entry was posted on Apr 08 2010mysql replace用法1.replace intoreplace into table (id,name) values(’1′,’aa’),(’2′,’bb’)此语句的作用是向表table中插入两条...
  • Mysql学习笔记:正则表达式 REGEXP:1.(^)字符 2.($)字符 3.(.)字符 4.(*)字符 5.(+)字符 6.(?)字符 7.de|abc 8.(abc)* 9.{1}, {2,3} 10.[a-dX], [^a-dX] 11.[.characters.]

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,033
精华内容 5,613
关键字:

mysql regexp用法

mysql 订阅