PHP正则表达式前瞻性未按预期工作


PHP regex lookahead not working as expected

我正在尝试匹配像2.3.3 Release fhf47fh这样的版本号,并去掉句点以获得所需的233 结果

/'d+(?='.)'d+(?='.)'d+/preg_match 模式

对这一时期的展望似乎没有如预期的那样奏效。

谢谢!

如果要比较版本,可以去掉空格,然后使用version_compare()

如果您只想要数字表示,请使用regex来简单地使用preg_replace()原始版本字符串中的所有非数字。

$version = '2.3.3 Release';
echo preg_replace('/'D+/', '', $version);

这似乎适用于我的所有测试用例。

preg_replace('/^('d+)'.('d+)'.('d+).*$/', '$1$2$3', $version);

我会使用这样的东西:

$pattern = '~'d+(?:'.*'d*)*~';

对于您在问题中提供的字符串:

if (preg_match('~'d+(?:'.*'d*)*~', $version, $matches))
    echo $matches[0]; // => 2.3.3

Regex101演示