我想構建一個正則運算式,它將在文本中捕獲不在方括號內且不在模式名稱()/城市()/數字()內的所有字串(以“/”開頭和結尾)
這是我現在得到的:
/(?<![name|city|number]\(|\[)(["'])[^\)|^\]] ?(?<!\\)\1/g
它作業正常,但不是最好的。例如:它不會捕獲 a() 和 n() 中的字串,盡管我希望正則運算式能夠捕獲它。

鏈接到正則運算式
問題在這里:
[name|city|number]
它將它用作單個字符的“或”,而不是像我想要的那樣用作單詞的“或”。
如何在不破壞其余部分的情況下修復我的正則運算式以使其表現得像我想要的那樣?
uj5u.com熱心網友回復:
讓每一個都成為它自己的負面回顧似乎可以解決問題
(?<!name\(|\[)(?<!city\(|\[)(?<!number\(|\[)(["'])[^\)|^\]] ?(?<!\\)\1
https://regex101.com/r/E91W5a/1
uj5u.com熱心網友回復:
另一種選擇是通過匹配來擺脫你不想擁有的東西,并使用捕獲組來捕獲你想要的東西。
請注意,這[name|city|number]是一個字符類而不是分組。
\b(?:name|city|number)\([^()]*\)|\[[^\][]*]|("[^"]*"|'[^']*')(?<!\\.)
模式匹配:
\b防止部分單詞匹配的單詞邊界(?:name|city|number)匹配交替中的任何單詞\([^()]*\)匹配自(...)|或者|\[[^\][]*]匹配自[...]|或者(捕獲組 1"[^"]*"|'[^']*'匹配來自"..."或'...'
)關閉組 1(?<!\\.)\負向后看,不在前一個字符之前斷言
查看正則運算式演示
由于您在正則運算式鏈接中選擇了 PCRE2,因此還有一個選項使用 SKIP FAIL 并僅獲得匹配項:
(?:\b(?:name|city|number)\([^()]*\)|\[[^][]*])(*SKIP)(*F)|\K(?:"[^"]*"|'[^']*')(?<!\\.)
查看另一個正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496155.html
標籤:正则表达式
