正则表达式以匹配版本号模式

时间:2017-03-17 05:32:56

标签: php regex

我想匹配字符串上看起来像版本号的所有东西,所以我开始使用这段代码

$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。

我还是一个有正则表达的新手,所以这些东西对我来说仍然是如此可怕。任何帮助将非常感谢。

2 个答案:

答案 0 :(得分:2)

希望这会奏效。

正则表达式:ver=(\d+(\.\d){1,2})

Regex demo

答案 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);