如何用第一次出现的字符串替换逗号分隔的字符串列表?
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
需要仅用 f1
替换 COALESCE(f1, f2, f2, ...)
,如果存在多个字符串(由 ,
分隔)或仅字符串本身,则为第一个字符串。
#\s*match\s*\((\s*coalesce\s*\((.+)\s*\))\s*\)\s+against#/i
我正在捕获 MATCH
中的内容(1,需要更换的内容)和 COALESCE
中的内容(2,替换内容)。
如何用 2 中的第一个值替换 1?
替换应从 COALESCE
开始,但前一部分必须匹配。在(应该开始替换的地方)之后使用 \K for resetting。所以第一部分看起来像 MATCH\s*\(\K
这里开始替换并且模式继续:\s*COALESCE\s*\(\s*([^,)]+)
...在第一个捕获组中捕获。
和可选部分 (?:,[^)]*)?
满足右括号。对于 AGAINST
部分,可以使用 lookahead:(?=\)\s*AGAINST)
。所以整个模式可以是:
/MATCH\s*\(\K\s*COALESCE\s*\(\s*([^,)]+)(?:,[^)]*)?\)(?=\)\s*AGAINST)/i
并替换为捕获的
。 Test at regex101.com
你可以只用下面的来匹配:
(MATCH\s*\()COALESCE\(([^,)\s]+)(?:\s*,[^)]+)?\)
并替换为
见DEMO
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,替换内容)。
如何用 2 中的第一个值替换 1?
替换应从 COALESCE
开始,但前一部分必须匹配。在(应该开始替换的地方)之后使用 \K for resetting。所以第一部分看起来像 MATCH\s*\(\K
这里开始替换并且模式继续:\s*COALESCE\s*\(\s*([^,)]+)
...在第一个捕获组中捕获。
和可选部分 (?:,[^)]*)?
满足右括号。对于 AGAINST
部分,可以使用 lookahead:(?=\)\s*AGAINST)
。所以整个模式可以是:
/MATCH\s*\(\K\s*COALESCE\s*\(\s*([^,)]+)(?:,[^)]*)?\)(?=\)\s*AGAINST)/i
并替换为捕获的。 Test at regex101.com
你可以只用下面的来匹配:
(MATCH\s*\()COALESCE\(([^,)\s]+)(?:\s*,[^)]+)?\)
并替换为
见DEMO