[英]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上測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.