繁体   English   中英

如何用第一次出现的逗号替换字符串列表?

[英]How do I replace a comma separated list of strings with the first occurrence?

WHERE MATCH (COALESCE(f1, f2, f3)) AGAINST (?) > 0
WHERE MATCH (COALESCE(f1)) AGAINST (?) > 0

通缉:

WHERE MATCH (f1) AGAINST (?) > 0
WHERE MATCH (f1) AGAINST (?) > 0

需要substritute COALESCE(f1, f2, f2, ...)与刚刚f1 ,即如果多个字符串存在于第一串(通过分离, )或仅字符串本身。

我正在为此

#\s*match\s*\((\s*coalesce\s*\((.+)\s*\))\s*\)\s+against#/i

而且我正在捕获MATCH内部的内容(1,需要替换的东西)和COALESCE内部的内容(2,替换的东西)。

如何用2内的第一个值替换1?

替换应从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

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM