2012-07-30 309 views
1

我想獲取兩個括號([])之外的字符串。PHP的preg_match

這裏是我的代碼:

$str = "[#123456] Some text"; 
preg_match('/^[#(?P<number>\w+)]/', $string, $matches); 

// Returns 123456 
echo $matches['number']; 

任何人能幫助我嗎?

編輯:我清除了我的問題。我只需要獲得括號內的數字。到目前爲止的迴應會給我整個字符串的數字。

+0

是否總是以 「#」 開始? – MasterGberry 2012-07-30 15:24:46

+0

是的,它總是以「[#」開始,並始終以「]結尾」 – Draven 2012-07-30 15:28:26

+0

@鈀擊敗了我:P使用他的:) – MasterGberry 2012-07-30 15:35:34

回答

2

如果您需要數字以及它們周圍的大括號,你可以使用這個正則表達式:

preg_match('/\[#\d+\]/U', $str, $matches); 
echo $matches[0]; 

否則,使用

preg_match('/\[#(\d+)\]/U', $str, $matches); 
echo $matches[1]; 
+0

我已經編輯我的問題更清楚了。我只需要括號內的數字。 – Draven 2012-07-30 15:34:45

+0

@Draven請參閱編輯。 – Palladium 2012-07-30 15:36:34

+0

這工作! :)你能解釋d +和U做什麼嗎? – Draven 2012-07-30 15:40:11

0

使用此:

preg_match('/[0-9]*/', $string, $matches); 
var_dump($matches); 

有關正則表達式的詳細信息,click here

+2

會不會有零? – Wiseguy 2012-07-30 15:28:09

+0

@Wiseguy很好的捕獲。編輯完整性。 – Matt 2012-07-30 15:28:54

0

還是......(編輯代碼顯示爲代碼)

$str = preg_replace('/[^0-9]/', '', $str); 
+0

我編輯了我的問題,以便更清楚。我只需要括號內的數字 – Draven 2012-07-30 15:34:16

0

這隻會從這個範圍內返回數[#...]

$str = "[#123456] Some text"; 
preg_match('/\[#(\d+)\]/', $str, $matches); 
var_dump($matches); 
echo $matches[1]; // 123456