2011-04-03 60 views
1

全部問候,正則表達式匹配兩個字符之間的字符串,但不包括字符

我還有一個RegEx問題。我花了數小時的搜尋,但顯然我錯過了我需要的一篇重要文章。

我需要在PHP中使用preg_match()來匹配括號之間的字符串,但不在結果中顯示括號。我見過類似問題的例子,但我相信我的問題是不同的,因爲它實際上是我正在處理的括號,在RegEx中是一個元字符。這有什麼好處?

反正...

字符串是:

 "200 result=1 (SIP/100-00000033)" 

當前的代碼:

preg_match("/\((.*)\)/s", $res, $matches); 

$比賽[0]變爲:

 "(SIP/100-00000033)" 

我想要什麼是:

 "SIP/100-00000033" 

我很抱歉,因爲我確定這很簡單,但我只是沒有把握它。有人會關心教育我嗎?

預先感謝您!

+1

你告訴我你沒有檢查'$匹配的內容'!? – Nick 2011-04-03 21:36:38

+0

'var_dump($ matches);' – Gordon 2011-04-03 21:38:25

+0

@Nick:我明白你爲什麼向我扔了一個「愚蠢」的石頭。我沒有指定我通過Asterisk使用這個腳本,它不允許使用「var_dump」 - 無可否認,我可以使用其他機制來檢查數組的內容,但我根本沒有想到它。但我們都必須通過經驗來學習。所以感謝你的洞察力。 – Joel 2011-04-04 11:14:30

回答

7

嗯,這一切都指您在正則表達式中對項目進行分組的方式。你的解決方案實際上是正確的,你只是使用錯誤的索引進行匹配。嘗試:

$matches[1] 

如果以某種方式給出錯誤,post'em,我們將解決。

+0

解決了它,謝謝。我知道這會很簡單。 – Joel 2011-04-04 11:12:51

3

如果你真的想在全場比賽排除括號,你可以用前瞻,看看隱藏assertions

preg_match('/(?<=\().*(?=\))/s', $res, $matches); 
相關問題