如何在MySQL中使用正则表达式引用一个组? 我尝试了:
REGEXP '^(.)\1$'
但是它不起作用。 如何解决?
如何在MySQL中使用正则表达式引用一个组? 我尝试了:
REGEXP '^(.)\1$'
但是它不起作用。 如何解决?
(虽然这是一个旧问题,但它是最优秀的搜索结果)
对于 MySQL 8:
SELECT REGEXP_REPLACE('stackoverflow','(.{5})(.*)','$2$1');
-- "overflowstack"
您可以使用()
创建捕获组,并使用$1
、$2
等引用它们。
对于MariaDB,使用\\1
、\\2
等来进行捕获,在REGEXP_REPLACE中完成。
Email
FROM tblBigMarkup; - Eddie Kumar\1
代替$1
。 "替换字符串可以使用反向引用形式的子表达式\N,其中N是从1到9的数字。" (https://mariadb.com/kb/en/regexp_replace/) - Jared Beck你不能在MySQL中引用正则表达式捕获组,没有方法。
您可以通过在查询中嵌套函数调用来解决此问题。假设您的列中有以下字符串:
'100 SOME ST,THE VILLAGES,FL 32163,USA'
并且您想要捕获城市名称。如果MySQL支持它,像这样的捕获组将起作用(但它不支持):
'^[0-9A-Z\s]+,\s*([a-zA-Z\s]*)'
您可以嵌套函数调用以剥离您不需要的部分,然后像这样获取您需要的部分:
SELECT REGEXP_SUBSTR(REGEXP_REPLACE(column_name, '^[0-9\\sA-Z]+,', ''), '^[0-9\\sA-Z]+') FROM table_name;
THE VILLAGES
...
旧问题,但它出现在我的搜索中,我找到了答案。您可以使用带有反向引用的Rlike。在MySQL 5.7上测试过
#replace 'aa' with column name
SELECT 'aa' RLIKE '^(.)\1$';