带有正则表达式的 Sscanf 甚至可以匹配空字符串
Sscanf with regex to match even an empty string
我在 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 个不是 @
.
的字符
我在 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 个不是 @
.