PHP preg_match仅返回匹配值

时间:2013-08-02 10:14:01

标签: php preg-match

我正在做以下事情:

$text = 'L\' utente _{nickname} ti ha invitato a giocare';

$text_vars = preg_match('#\_{(.*?)\}#', $text, $matches);

返回:

Array
(
    [0] => _{nickname}
    [1] => nickname
)

如何仅返回:

Array
(
    [0] => nickname
)

2 个答案:

答案 0 :(得分:9)

来自preg_match()文档:

  

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


对于所需的行为,请使用array_shift(),如下所示:

$text = 'L\' utente _{nickname} ti ha invitato a giocare';
$text_vars = preg_match('#\_{(.*?)\}#', $text, $matches);
$temp = array_shift( $matches );

答案 1 :(得分:1)

您可以使用前瞻(?=..)和后瞻(?<=..)(或匹配重置\K

$text_vars = preg_match('~(?<=_{)[^}]++(?=})~', $text, $match);

或者

$text_vars = preg_match('~_{\K[^}]++(?=})~', $text, $match);