使用regex进行Sscanf以匹配空字符串


Sscanf with regex to match even an empty string

我在sscanf中使用了这个正则表达式

sscanf($seat, "%d-%[^(](%[^@]@%[^)])");

它工作得很好,当我得到这种字符串:173-9B(AA@3.45 EUR@32H)但是当我得到这样的字符串时173-9B(@3.14 EUR@32H)

都乱了,我怎么能接受第一个(和第一个@之间的空字符串呢?

您最好在preg_match中使用正则表达式来处理输入中的可选数据:

$re = '/('d*)-([^(]*)'(([^@]*)@([^)]*)')/';
preg_match($re, '173-9B(@3.45 EUR@32H)', $m);
unset($m[0]);
print_r($m);
输出:

Array
(
    [1] => 173
    [2] => 9B
    [3] =>
    [4] => 3.45 EUR@32H
)

第二个例子:

preg_match($re, '173-9B(AA@3.45 EUR@32H)', $m);
unset($m[0]);
print_r($m);
Array
(
    [1] => 173
    [2] => 9B
    [3] => AA
    [4] => 3.45 EUR@32H
)

使用([^@]*)将使它匹配0个非@的字符。