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 |
意义 |
|---|---|
|
|
区分大小写的匹配。 |
|
|
不区分大小写的匹配。 |
|
|
Multiple-line模式。识别字符串中的行终止符。默认行为是仅在字符串表达式的开头和结尾匹配行终止符。 |
|
|
|
|
|
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 |
+--------+----------------------------------+
请注意,学生姓氏中的所有 a 和 e 字符现已替换为 % 。
位置
仅从位置 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' 。
相关用法
- MySQL REGEXP_REPLACE()用法及代码示例
- MySQL REGEXP_INSTR()用法及代码示例
- MySQL REGEXP_SUBSTR()用法及代码示例
- MySQL REGEXP_INSTR方法用法及代码示例
- MySQL REGEXP_LIKE方法用法及代码示例
- MySQL REGEX用法及代码示例
- MySQL REPEAT()用法及代码示例
- MySQL REPLACE()用法及代码示例
- MySQL REPEAT方法用法及代码示例
- MySQL REPLACE方法用法及代码示例
- MySQL REVERSE()用法及代码示例
- MySQL REVERSE方法用法及代码示例
- MySQL ROUND()用法及代码示例
- MySQL RADIANS方法用法及代码示例
- MySQL RPAD()用法及代码示例
- MySQL RLIKE用法及代码示例
- MySQL RIGHT JOIN用法及代码示例
- MySQL ROW_NUMBER()用法及代码示例
- MySQL RTRIM方法用法及代码示例
- MySQL RIGHT()用法及代码示例
- MySQL RADIANS()用法及代码示例
- MySQL ROUND方法用法及代码示例
- MySQL RAND()用法及代码示例
- MySQL RIGHT方法用法及代码示例
- MySQL RPAD方法用法及代码示例
注:本文由纯净天空筛选整理自Arthur Yanagisawa大神的英文原创作品 MySQL | REGEXP_REPLACE method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
