2015-04-06 19 views
-3

我正在尋找一種方法來構建一個長的正則表達式,其中包含幾個具有正則表達式命令的特殊字符的項目,例如:帶有特殊字符的正則表達式,如|

「浴缸|黑色」和「浴盆|綠色」。

如何將它們作爲「字符串」與|內?

我想過

(Bath Tub|Showers) \| (Black|Green) 

但再有類似的項目「浴缸|綠(光)」和「浴缸|綠(黑)」,所以我需要補充的是太多,所以我認爲在某些情況下,它會是最好的解決方案,就像

"Bath Tub | Green (light)"|"Bath Tub | Green (dark)" 

如果這將工作。

任何想法如何做到這一點?對於正則表達式我真的很可怕,它給了我很多頭痛,所以我會很感激任何幫助!

親切的問候

+2

你想完全匹配什麼? – CMPS

+3

什麼語言/雷鬼風味? – dawg

+0

括號也特別。 – usr2564301

回答

0

您可以將它們添加到所有列表交替:

Bath Tub|Showers|Black|Green(?: \((?:light|dark)\))? 

看一看的example

主要的一點是,所有這些變化都可以被添加到列表(|分離),並且如果您還有其他的話這些字符串後,你可以將它們添加爲可選的非捕獲組(?: \((?:light|dark)\))? )。另外,請注意轉義圓括號 - 它們將被匹配爲文字。

如果要匹配字符串|中的文字管道符號,則應該將其跳過:\|。見this example

要匹配來自"Bath Tub | Green (light)"|"Bath Tub | Green (dark)"的所有條目以及引號,可以在模式的開始和結尾添加帶引號的可選組:(?:")?(?:Bath Tub|Showers|Black|Green(?: \((?:light|dark)\))?)(?:")?。另見example

+0

非常感謝,我會嘗試一下,並玩一下並回報:) – xqz313

+0

好吧,我發現有關費用問題。 我想使用正則表達式作爲過濾器,它允許我只抓住長列表中的特定項目...有時我需要黑色但不是綠色和淺色但不黑的浴缸。 我怎樣才能讓它更像一個列表,在哪裏我預先定義了應該找到什麼以及哪些不應該? – xqz313

+0

最好的方法是創建一個你想匹配的單子列表,然後用它來獲得你想要的。例如,要爲列表中的所有項目添加可選的「過濾器」,您可以將整個列表放入一個捕獲組中,另一個可選組將應用於所有項目:'(?:Bath Tub | Showers | Black |綠色)(?: \((?: light | dark)\))?'看看:https://regex101.com/r/kI2dV3/1 –