带正则表达式的Sscanf甚至可以匹配空字符串

时间:2015-09-06 09:27:02

标签: php regex scanf

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

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

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

这一切都搞砸了,我怎样才能接受第一个(和第一个@之间的空字符串?

1 个答案:

答案 0 :(得分:1)

最好在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
)

使用([^@]*)会使其与另外@个字符匹配。