我在sscanf中使用这个正则表达式
sscanf($seat, "%d-%[^(](%[^@]@%[^)])");
当我得到这种字符串时,它运作良好:
173-9B(AA@3.45 EUR@32H)
但是当我得到这种字符串时:
173-9B(@3.14 EUR@32H)
这一切都搞砸了,我怎样才能接受第一个(
和第一个@
之间的空字符串?
答案 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
)
使用([^@]*)
会使其与另外@
个字符匹配。