WHERE MATCH (COALESCE(f1, f2, f3)) AGAINST (?) > 0
WHERE MATCH (COALESCE(f1)) AGAINST (?) > 0
想:
WHERE MATCH (f1) AGAINST (?) > 0
WHERE MATCH (f1) AGAINST (?) > 0
需要用 f1
替换COALESCE(f1, f2, f2, ...)
,如果存在多个字符串(用 ,
分隔),则这是第一个字符串,或者只是字符串本身。
我正在研究这个:
#'s*match's*'(('s*coalesce's*'((.+)'s*'))'s*')'s+against#/i
我正在捕获MATCH
内部的内容(1,需要更换的内容)和COALESCE
内部的内容(2,替换)。
如何将 1 替换为 2 中的第一个值?
替换应从 COALESCE
开始,但前一部分必须匹配。使用 ''K 在之后重置(替换应开始的位置)。因此,第一部分可能看起来像MATCH's*'('K
在这里开始替换并且模式继续:'s*COALESCE's*'('s*([^,)]+)
......在第一个捕获组中捕获。
可选部分(?:,[^)]*)?
满足闭合括号。对于AGAINST
部分,可以使用前瞻:(?=')'s*AGAINST)
。所以整个模式可能是:
/MATCH's*'('K's*COALESCE's*'('s*([^,)]+)(?:,[^)]*)?')(?=')'s*AGAINST)/i
并替换为捕获的$1
.在 regex101.com 进行测试
您可以使用以下内容进行匹配:
(MATCH's*'()COALESCE'(([^,)'s]+)(?:'s*,[^)]+)?')
并替换为$1$2
查看演示