PHP:提取字符串的版本号
我得到每次不同的字符串。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
多一个问题是,字符串可以包含版本号旁边的数字。
什么是快速完成此任务的方法?
我会使用正则表达式是:
代码:
<?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:
嗨。感谢这个例子。但是当我编辑我的问题时:另一个问题是字符串可能包含我不需要的版本号旁边的数字。 – user2413244
你的代码返回v1.3而不是1.3。我已经检查过。 – user2413244
你在使用第二个索引吗? [1]? – Neil
您可以使用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
<?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
)
使用正则表达式除去0-9和“。”之外的所有内容。来自字符串。 Google Regex获取更多信息。 –
@SloanThrasher你好, 还有一个问题是字符串可以包含版本号旁边的数字。 – user2413244
@ user2413244检查我的帖子是否正常工作? –