我正在做以下事情:
$text = 'L\' utente _{nickname} ti ha invitato a giocare';
$text_vars = preg_match('#\_{(.*?)\}#', $text, $matches);
返回:
Array
(
[0] => _{nickname}
[1] => nickname
)
如何仅返回:
Array
(
[0] => nickname
)
答案 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);