PHP:提取字符串的版本号

时间:2017-04-02 06:02:12

标签: 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

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

执行此任务的快捷方式是什么?

3 个答案:

答案 0 :(得分:3)

我会使用正则表达式:

代码:

<?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

答案 1 :(得分:1)

您可以使用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

答案 2 :(得分: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
)