如何在MySQL正则表达式中引用捕获组?

8ftvxx2r  于 2023-06-28  发布在  Mysql
关注(0)|答案(4)|浏览(105)

如何在MySQL中使用正则表达式引用组?我试过:

REGEXP '^(.)\1$'

但它不起作用。如何做到这一点?

eanckbw9

eanckbw91#

(Old问题,但搜索结果靠前)
对于MySQL 8:

SELECT REGEXP_REPLACE('stackoverflow','(.{5})(.*)','$2$1');
-- "overflowstack"

您可以使用()创建捕获组,也可以使用$1$2等引用它们。
对于MariaDB,捕获在REGEXP_REPLACE中完成,\\1\\2等。分别表示。

vuktfyat

vuktfyat2#

你不能,没有办法在MySql中引用正则表达式捕获组。

axzmvihb

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;
那些村庄
...

inb24sb2

inb24sb24#

老问题,但它出现在我的搜索,我找到了答案。你可以在反向引用中使用Rlike。在MySQL 5.7上测试

#replace 'aa' with column name
SELECT 'aa' RLIKE '^(.)\1$';

相关问题