2017-04-02 138 views
0

我得到每次不同的字符串。PHP:提取字符串的版本号

从字符串我需要提取版本号。当版本号可以有不同的类型,如:

v1.3 
V1.3 
v 2.4.1 
V 2.4.1 

version1.3 
version 1.3 
Version2.4.1 
Version 2.4.1 

输出需求是:1.3 or 2.4.1

多一个问题是,字符串可以包含版本号旁边的数字。

什么是快速完成此任务的方法?

+2

使用正则表达式除去0-9和“。”之外的所有内容。来自字符串。 Google Regex获取更多信息。 –

+0

@SloanThrasher你好, 还有一个问题是字符串可以包含版本号旁边的数字。 – user2413244

+0

@ user2413244检查我的帖子是否正常工作? –

回答

2

我会使用正则表达式是:

代码:

<?php 

function getVersion($str) { 
    preg_match("/(?:version|v)\s*((?:[0-9]+\.?)+)/i", $str, $matches); 
    return $matches[1]; 
} 

print_r(getVersion("Version 2.4.1")); 

?> 

Regex101:

https://regex101.com/r/6WnQKt/3

+0

嗨。感谢这个例子。但是当我编辑我的问题时:另一个问题是字符串可能包含我不需要的版本号旁边的数字。 – user2413244

+0

你的代码返回v1.3而不是1.3。我已经检查过。 – user2413244

+0

你在使用第二个索引吗? [1]? – Neil

0

您可以使用preg_match做到这一点。这将匹配字符串末尾的任何版本。正则表达式是/(\d+\.?)+$/

$versions = array(
    'v1.3', 
    'V1.3', 
    'v 2.4.1', 
    'V 2.4.1', 
    'version1.3', 
    'version 1.3', 
    'Version2.4.1', 
    'Version 2.4.1', 
); 

foreach($versions as $version) { 
    if (0 !== preg_match('/(\d+\.?)+$/', $version, $matches)) { 
     echo 'original: ' . $version . '; extracted: ' . $matches[0] . PHP_EOL; 
    } 
} 

输出

original: v1.3; extracted: 1.3 
original: V1.3; extracted: 1.3 
original: v 2.4.1; extracted: 2.4.1 
original: V 2.4.1; extracted: 2.4.1 
original: version1.3; extracted: 1.3 
original: version 1.3; extracted: 1.3 
original: Version2.4.1; extracted: 2.4.1 
original: Version 2.4.1; extracted: 2.4.1 
0

PHP code demo

<?php 
ini_set("display_errors", 1); 
$versions=array(
"v1.3", 
"V1.3", 
"v 2.4.1", 
"V 2.4.1", 
"version1.3", 
"version 1.3", 
"Version2.4.1", 
"Version 2.4.1"); 

foreach($versions as $version) 
{ 
    preg_match("/[vV](?:ersion)?\s*\K[\d\.]+/", $version,$matches); 
    print_r($matches); 
} 

输出:

Array 
(
    [0] => 1.3 
) 
Array 
(
    [0] => 1.3 
) 
Array 
(
    [0] => 2.4.1 
) 
Array 
(
    [0] => 2.4.1 
) 
Array 
(
    [0] => 1.3 
) 
Array 
(
    [0] => 1.3 
) 
Array 
(
    [0] => 2.4.1 
) 
Array 
(
    [0] => 2.4.1 
)