如何在MySQL中使用正则表达式引用组?我试过:
REGEXP '^(.)\1$'
但它不起作用。如何做到这一点?
eanckbw91#
(Old问题,但搜索结果靠前)对于MySQL 8:
SELECT REGEXP_REPLACE('stackoverflow','(.{5})(.*)','$2$1'); -- "overflowstack"
您可以使用()创建捕获组,也可以使用$1、$2等引用它们。对于MariaDB,捕获在REGEXP_REPLACE中完成,\\1,\\2等。分别表示。
()
$1
$2
\\1
\\2
vuktfyat2#
你不能,没有办法在MySql中引用正则表达式捕获组。
axzmvihb3#
可以通过在查询中嵌套函数调用来解决此问题。假设你的列中有这个字符串:'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;那些村庄...
'100 SOME ST,THE VILLAGES,FL 32163,USA'
'^[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;
inb24sb24#
老问题,但它出现在我的搜索,我找到了答案。你可以在反向引用中使用Rlike。在MySQL 5.7上测试
#replace 'aa' with column name SELECT 'aa' RLIKE '^(.)\1$';
4条答案
按热度按时间eanckbw91#
(Old问题,但搜索结果靠前)
对于MySQL 8:
您可以使用
()
创建捕获组,也可以使用$1
、$2
等引用它们。对于MariaDB,捕获在REGEXP_REPLACE中完成,
\\1
,\\2
等。分别表示。vuktfyat2#
你不能,没有办法在MySql中引用正则表达式捕获组。
axzmvihb3#
可以通过在查询中嵌套函数调用来解决此问题。假设你的列中有这个字符串:
'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;
那些村庄
...
inb24sb24#
老问题,但它出现在我的搜索,我找到了答案。你可以在反向引用中使用Rlike。在MySQL 5.7上测试