Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Sscanf与正则表达式匹配,即使是空字符串_Php_Regex_Scanf - Fatal编程技术网

Php 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中使用这个正则表达式

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并不特别,只是它对我更方便。