我想匹配字符串上看起来像版本号的所有东西,所以我开始使用这段代码
$str = 'ver=4.7.3/asdasd, ver=1, ver=2.5?, ver=4.7, ver=a124bcd12345';
preg_match_all("/ver=(\d+(\.\d{1,2}))/", $str, $output);
// $output
[
"ver=4.7",
"ver=2.5",
"ver=4.7",
],
[
"4.7",
"2.5",
"4.7",
],
[
".7",
".5",
".7",
],
我得到$output[1]
的结果似乎差不多但仍然缺失,它应符合以下条件:
1. should be a number - ok
2. n.n (4.7) - ok
3. n.n.n (4.7.1) - not being matched (it stops at 4.7)
4. 0.n - ok
但是现在,它只返回4.7而不是4.7.3。
我还是一个有正则表达的新手,所以这些东西对我来说仍然是如此可怕。任何帮助将非常感谢。
答案 0 :(得分:2)
答案 1 :(得分:2)
您可以使用以下正则表达式:
(?<=ver=)[\d.]+
参见 regex demo
PHP (demo)
$str = 'ver=4.7.3/asdasd, ver=1, ver=2.5?, ver=4.7, ver=a124bcd12345';
preg_match_all('/(?<=ver=)[\d.]+/', $str, $output);
print_r($output);