防止 sscanf() 使用 %s 占位符消耗“-”[重复]

问题描述 投票:0回答:1

可以区分小数和'-'

$str = "1995-25";
$pat = sscanf( $str , "%d-%d);
print_r($pat);

还可以区分第一个'-'和后面的字符串

$str = "-of";
$pattern = sscanf ( $str , "-%s" );
print_r ( $pattern );

但是当涉及到在字符串中间表示“-”时 它假设 '-' 作为字符串 更令人惊讶的是,第一个 %s 读到了最后 甚至将 4 视为字符串

$str = '-of-america-4';
$pat = sscanf ($str , "-%s-%s-%d");
print_r($pat);
// outputs [0] => of-america-4
php scanf greedy
1个回答
1
投票

%s
是贪婪匹配,你可以使用
%[^-]

<?php
$str = '-of-america-4';
$pat = sscanf($str , '-%[^-]-%[^-]-%d');
print_r($pat);
Array
(
    [0] => of
    [1] => america
    [2] => 4
)
© www.soinside.com 2019 - 2024. All rights reserved.