我在 Mysql 表中有这条记录:
ADDRESS
----------------------------------
sdasd 4354 ciao 12345 sdsdsa asfds
我想匹配从开头到第一次出现 5 位数字单词的所有字符,包括它。
在这种情况下,使用 REGEXP_REPLACE,我想删除匹配的子字符串并返回 sdsdsa asfds
。
我尝试做的是:
SELECT REGEXP_REPLACE(ADDRESS, '^.+\b\d{5}\b.','') FROM `mytable`
正则表达式似乎可以在这个 snippet 中测试它我不明白为什么 Mysql 不会。
最佳答案
MySQL supports POSIX regex它不支持类似 PERL 的属性,例如\b
, \d
等等
这个正则表达式应该适合你:
SELECT REGEXP_REPLACE
('sdasd 4354 ciao 12345 sdsdsa asfds', '^.+[[:<:]][0-9]{5}[[:blank:]]+', '') as val;
+--------------+
| val |
+--------------+
| sdsdsa asfds |
+--------------+
正则表达式详细信息:
-
^.+
: 在开头匹配 1 个或多个任意字符(贪心) -
[[:<:]]
: 匹配单词边界(零宽度) -
[0-9]{5}
: 恰好匹配 5 位数字 -
[[:blank:]]+
: 匹配 1 个或多个空格(制表符或空格)
关于mysql - REGEX_REPLACE 不匹配从开始到第一次出现 5 位数字单词的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58461601/