MariaDB文档说明了REGEXP_INSTR: 返回字符串主题中第一次出现正则表达式模式的位置,如果未找到pattern,则返回0。
我的任务是(简化):找到o后跟双辅音
SELECT REGEXP_INSTR('a_kollision', 'o([lm])\\1'); # -> expected 4 got 1
它返回1,但我原本预计会有4作为oll的位置
对替换工作做同样的事情:
# replace works as expected
SELECT REGEXP_REPLACE('a_kollision', 'o([lm])\\1', '???'); # -> a_k???ision -- OK
似乎在REGEXP_INSTR中使用括号时会出现问题:
SELECT REGEXP_REPLACE('a_kollision', 'oll', '???'); # -> a_k???ision -- OK
SELECT REGEXP_REPLACE('a_kollision', '(oll)', '???'); # -> a_k???ision -- OK
SELECT REGEXP_INSTR('a_kollision', 'oll'); # -> 4 -- OK
SELECT REGEXP_INSTR('a_kollision', '(oll)'); # -> 1 -- why?
如果没有匹配,则REGEXP_INSTR按预期返回0.
使用db:10.1.13
同时检查最新的稳定版本:10.2.6 没有区别。