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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。