2017-03-17 56 views
2

我想匹配這似乎是一個字符串版本號的一切,所以我開始使用此代碼正則表達式匹配的版本號模式

$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.3它只返回4.7。

我仍然是一個正則表達式的新手,所以這些東西對我來說仍然是如此可怕。任何幫助將非常感激。

回答

2

你也許使用下面的正則表達式

(?<=ver=)[\d.]+ 

看到regex demo

P HPdemo

$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); 
+0

感謝更新的答案,因爲我也很需要檢查字符串'版本='。 – dexterb

2

希望這會起作用。

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

Regex demo