2016-08-01 81 views
1

我想做一個正則表達式來找出第三個分隔符「/」,如果找到匹配,然後抓住它之前的整個句子,並刪除休息。正則表達式不爲我工作

black/white/green/blue/delta/orange/yellow/pink...(n) 

結果應該是

black/white/green 

我想這(.*(\/{2,3}))但沒有奏效。

+0

這是什麼意思*沒有工作*? –

+0

你好,我通過刪除最後一個節點「/」對我的結果進行了修正。你能幫我解決嗎?我嘗試了我自己,但沒有成功。 – Mask

+0

我想你想得到你想要的而不是斜線的子串。嘗試'^([^ \ /] *(?:\/[^ \ /] *){2})。*'。 –

回答

3

您的(.*(\/{2,3}))匹配任何符號(可能不是換行符),然後匹配2或3個/符號,將整個匹配捕獲到組1中,並將正斜槓匹配到組2中。它可以在較大字符串,但它只是從字符串的開始到符合最後2或2個符號的符號有效匹配。

您可以使用

^((?:[^\/]*\/){3}).* 

並與$1逆向引用替換。

regex demo

根據輸入和正則表達式引擎,你可能需要一個DOTALL修改爲.匹配換行了。

請注意,您可以使用更簡單的^((?:[^\/]*\/){3})代替匹配您的子字符串。另外,如果您有權訪問原始編程代碼,則可以將字符串拆分爲/,取前3個元素,然後使用/加入。

+1

幫助很大。 – Mask

+1

非常感謝你Wiktor。萬分感謝! – Mask

1

試試這個:

^((?\w+ \/){3}) 

說明:

(\ w + /?) - 它匹配白色 /(_是空間,只是標記在這裏),但由於第一個字是在該行的開始,它不包含單詞之前的空格,所以'?'第一個空間後,這意味着可選。 {3}表示找到這個組白色 /發生3次(不少於,不大於) 所有這一切都以^()括起來,不符合f.e.在該行中間發生3次。

+0

我沒想到會有這麼快速的回答。如果你也可以解釋你的代碼,我會很感激。只是上面寫的那個。 – Mask