在 MySQL 的正则表达式中引用捕获组
MySQL 提供全面的正则表达式支持,包括捕获和重用匹配模式的部分的能力。但是,捕获和引用组与其他正则表达式实现略有不同。
在提供的示例中,REGEXP '^(.)1$' 尝试匹配紧随其后重复的字符。不幸的是,它在 MySQL 中不起作用,因为本机不支持捕获组。
MySQL 8 的解决方案
MySQL 8 引入了 REGEXP_REPLACE 函数,该函数支持捕获组。要引用捕获组,请使用 $n,其中 n 是捕获组的索引(从 1 开始)。例如:
SELECT REGEXP_REPLACE('stackoverflow','(.{5})(.*)',''); -- Result: "overflowstack"
在上面的示例中,第一个捕获组 ((.{5})) 与前五个字符(堆栈)匹配。第二个捕获组 ((.*)) 与其余字符匹配(溢出)。然后它们在替换字符串中进行交换。
MariaDB 的解决方案
MariaDB 是 MySQL 的一个分支,也支持正则表达式中的捕获组,但采用不同的方法。它使用 \n 来引用 REGEXP_REPLACE 中的捕获组:
SELECT REGEXP_REPLACE('stackoverflow','(.{5})(.*)','\2\1'); -- Result: "overflowstack"
以上是如何在MySQL的正则表达式中引用捕获组?的详细内容。更多信息请关注PHP中文网其他相关文章!