2013-04-30 175 views
0

我期待嘗試結合2個正則表達式。結合2個正則表達式

$test = preg_replace('/\[.*?\]/', '', $test); 

我使用它來除去任何方括號和詞語的括號之間..

$test = preg_replace ('/[\[\]=]+/', '', $test); 

我使用它來從我的字符串中去除任何= []符號。

單獨做這件事似乎很好,但我想結合起來。 任何想法如何,我可以做到這一點。一切我已經嘗試打破兩..

感謝

+0

兩者中的第一個將去掉方括號和它們之間的所有內容。第二個將刪除'='符號。不確定這是否是你真正想要的,但爲了將這兩者結合起來,你可以使用'|'來表示_or_。 – 2013-04-30 08:03:09

+0

你首先執行哪一個?該訂單將影響最終結果。 – nhahtdh 2013-04-30 08:20:01

回答

1

使用alternation

$test = preg_replace('/\[.*?\]|[\[\]=]/', '', $test); 

順序是這裏重要的,所以,在第一匹配的括號及其內容將被刪除。只要沒有嵌套括號,這應該可以正常工作。

所以,這個表達式將匹配\[.*?\]OR[\[\]=]

+1

我相信他有去除流浪(無與倫比的)括號 – Dave 2013-04-30 08:05:42

+0

@Dave,好吧,可以。我改變了一下我的答案。 – stema 2013-04-30 08:16:45

+0

這幾乎是完美的:) 但是如果'$ test =「= [TEST] Wo = rd」'它返回'TESTWord'而不是'Word' 無論如何排序呢? – JeffVader 2013-04-30 08:58:03

1

簡單的答案或者是使用一個或:

'/\[[^\]]*\]|[\[\]=]+/' 

注意,我還第一串中改變了內側圖案。我不確定是否需要反斜槓。

+0

這不像將2個正則表達式放在一起簡單。你必須介意表達式中第一個出現的順序,因爲當你交換它們時,行爲會有所不同。 – nhahtdh 2013-04-30 08:13:06

+0

@mhahtdh你能舉個例子嗎?在這種情況下,我想不出一個(他在擦除所有比賽) – Dave 2013-04-30 08:14:02

+0

'[abc]'就是一個很好的例子。只需在交替交換中對2件進行測試即可。 – nhahtdh 2013-04-30 08:18:05