5

我正在执行以下操作:

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

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

返回:

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

如何使它只返回以下内容?

Array
(
    [0] => nickname
)
4

3 回答 3

10

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 );
于 2013-08-02T10:17:10.963 回答
8

尝试这个

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

echo $text_vars;
于 2015-12-20T21:28:17.943 回答
1

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

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

或者

$text_vars = preg_match('~_{\K[^}]++(?=})~', $text, $match);
于 2013-08-02T17:06:16.753 回答