Php Sscanf与正则表达式匹配,即使是空字符串
我在sscanf中使用这个正则表达式Php Sscanf与正则表达式匹配,即使是空字符串,php,regex,scanf,Php,Regex,Scanf,我在sscanf中使用这个正则表达式 sscanf($seat, "%d-%[^(](%[^@]@%[^)])"); 当我得到这种字符串时,它工作得很好: 173-9B(AA@3.45 EUR@32H) 但是当我得到这样的字符串时: 173-9B(@3.14EUR@32H) 这一切都搞砸了,我怎么能同时接受第一个(和第一个@之间的空字符串?您最好在preg\u match中使用正则表达式来处理输入中的可选数据存在: $re = '/(\d*)-([^(]*)\(([^@]*)@([^)]*)\
sscanf($seat, "%d-%[^(](%[^@]@%[^)])");
当我得到这种字符串时,它工作得很好:
173-9B(AA@3.45 EUR@32H)
但是当我得到这样的字符串时:
173-9B(@3.14EUR@32H)
这一切都搞砸了,我怎么能同时接受第一个
(
和第一个@
之间的空字符串?您最好在preg\u 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
)
第二个示例:
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个非@
的字符。使用sscanf而不是preg_match
?@anubhava并不特别,只是它对我更方便。