在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中文網其他相關文章!