当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


MySQL REGEXP_REPLACE方法用法及代码示例


MySQL 的 REGEXP_REPLACE(~) 方法返回输入字符串 expr ,其中所有与正则表达式 pat 匹配的匹配项都被新的子字符串 repl 替换。

参数

1. expr | string

要执行正则表达式匹配和替换的字符串。

2. pat | regular expression

用于匹配的正则表达式模式。

3. repl | string

用于替换 expr 中与正则表达式模式匹配的匹配项的子字符串。

4. pos | integer | optional

expr 中开始搜索的位置。默认为 1

5. occurrence | number | optional

要替换哪个匹配项出现。默认为0(所有出现的情况)。

6. match_type | string | optional

指定如何执行匹配。可以指定多个字符,但是,如果提供的match_types 之间存在矛盾,则右侧的match_type 优先。

match_type

意义

c

区分大小写的匹配。

i

不区分大小写的匹配。

m

Multiple-line模式。识别字符串中的行终止符。默认行为是仅在字符串表达式的开头和结尾匹配行终止符。

n

. 字符匹配行终止符。默认情况下,. 匹配在行尾停止。

u

Unix-only 行结尾。仅换行符被识别为以 .^$ 匹配运算符结尾的行。

例子

考虑下表有关一些学生的信息:

student_id

名称

名字

day_enrolled

年龄

用户名

1

Sky

Towner

2015-12-03

17

stowner1

2

Ben

Davis

2016-04-20

19

bdavis2

3

Travis

Apple

2018-08-14

18

tapple3

4

Arthur

David

2016-04-01

16

adavid4

5

Benjamin

Town

2014-01-01

17

btown5

可以使用此处的代码创建上表。

基本用法

要将学生姓氏中出现的所有 [ae] 正则表达式匹配替换为 '%'

SELECT lname, REGEXP_REPLACE(lname, '[ae]', '%')
FROM students;



+--------+----------------------------------+
| lname  | REGEXP_REPLACE(lname,'[ae]','%') |
+--------+----------------------------------+
| Towner | Town%r                           |
| Davis  | D%vis                            |
| Apple  | %ppl%                            |
| David  | D%vid                            |
| Town   | Town                             |
+--------+----------------------------------+

请注意,学生姓氏中的所有 ae 字符现已替换为 %

位置

仅从位置 4 开始正则表达式匹配:

SELECT REGEXP_REPLACE('abcdefghi', '[a-z]', 'X', 4, 0, 'c');



+------------------------------------------------------+
| REGEXP_REPLACE('abcdefghi', '[a-z]', 'X', 4, 0, 'c') |
+------------------------------------------------------+
| abcXXXXXX                                            |
+------------------------------------------------------+

请注意我们如何仅从位置 4 开始替换(由原始字符串 'abcdefghi' 中的 d 占据)。

出现次数

要替换第二次出现的匹配:

SELECT REGEXP_REPLACE('abc def ghi', '[a-z]', 'X', 1, 2, 'c');



+--------------------------------------------------------+
| REGEXP_REPLACE('abc def ghi', '[a-z]', 'X', 1, 2, 'c') |
+--------------------------------------------------------+
| aXc def ghi                                            |
+--------------------------------------------------------+

请注意我们如何仅替换第二次出现的正则表达式匹配(原始字符串 'abc def ghi' 中的 'b' )。

比赛类型

要执行区分大小写的匹配:

SELECT REGEXP_REPLACE('abc DEF ghi', '[a-z]+', 'X', 1, 0, 'c');



+---------------------------------------------------------+
| REGEXP_REPLACE('abc DEF ghi', '[a-z]+', 'X', 1, 0, 'c') |
+---------------------------------------------------------+
| X DEF X                                                 |
+---------------------------------------------------------+

请注意,当我们指定 'c'match_type 时,'DEF' 不会被替换为 'X' 。如果我们指定了 match_type'i' (不区分大小写),我们将返回 'X X X'

相关用法


注:本文由纯净天空筛选整理自Arthur Yanagisawa大神的英文原创作品 MySQL | REGEXP_REPLACE method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。