【问题标题】:Sscanf with regex to match even an empty string带有正则表达式的 Sscanf 甚至可以匹配一个空字符串
【发布时间】:2015-09-06 09:27:01
【问题描述】:

我在 sscanf 中使用这个正则表达式

sscanf($seat, "%d-%[^(](%[^@]@%[^)])");

当我得到这种字符串时它工作得很好: 173-9B(AA@3.45 EUR@32H) 但是当我得到这种字符串时: 173-9B(@3.14 EUR@32H)

都搞砸了,我怎么还能接受第一个(和第一个@之间的空字符串?

【问题讨论】:

标签: php regex scanf


【解决方案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
)

使用([^@]*) 将使其匹配另外0 个不是@ 的字符。

【讨论】:

    猜你喜欢
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多