2012-07-30 253 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