簡體   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