不知道如何让这个正则表达式停止返回数组

时间:2014-06-10 12:21:43

标签: php regex preg-match

以下内容:

$key = "[[question(8)]]";

preg_match( '/\((.*?)\)/', $key, $questionID );
print_r( $questionID );

输出:

Array
(
    [0] => (8)
    [1] => 8
)

我只想输出8

我做错了什么?

3 个答案:

答案 0 :(得分:2)

preg_match只返回一个数组。

您需要执行以下操作:

$questionID = $questionID[1];

从手册:

  

如果提供了$ matches [第三个参数],那么它将填充搜索结果。   $matches[0]将包含与完整模式匹配的文本,   $matches[1]将获得与第一个捕获的文本匹配的文本   带括号的子模式,依此类推。

答案 1 :(得分:0)

第一个索引是你的正则表达式的整个匹配。第二个索引是第一个捕获组。捕获组由()标识。因此,在这种情况下,您的第一个(也是唯一的)捕获组是(.*?)。如果你有第二个捕获组,它将在数组的下一个索引中。

如果您只想返回第一个捕获组,请执行$questionID[1]

答案 2 :(得分:0)

如果您只需要那个号码,那么根本不需要数组。要不返回数组,请使用返回string的函数,例如preg_replace

$key = "[[question(8)]]";

$questionID = preg_replace( '/[^0-9]/', '', $key );

var_dump ( $questionID );

http://www.php.net/manual/en/function.preg-replace.php