我在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个非@
的字符。