Php preg_match_all 函数查找版本模式

Php preg_match_all function to find a version pattern

我正在尝试从包含以下行的文件中获取版本信息:

[程序集:程序集版本(“1.0.0.1”)]

我需要获取 1.0.0.1

我试过的功能如下:

preg_match_all('/[assembly: AssemblyVersion("([^,">]+).*?")/')

但是这个函数没有返回任何匹配项。

在此示例中获取版本信息的正确方法是什么?

您可以使用这个正则表达式:

$line='[assembly: AssemblyVersion("1.0.0.1")]';

    preg_match_all("/(?<=\[assembly: AssemblyVersion\(\").*(?=\"\))]/",$line,$matches);

您当前的代码似乎无法正常工作。据我所知,主要问题是您没有转义文字括号和方括号。进行更改后,它似乎起作用了:

$input = "blah blah blah [assembly: AssemblyVersion(\"1.0.0.1\")] blah";
preg_match_all('/\[assembly: AssemblyVersion\("([^,">]+).*?"\)\]/', $input, $array);
print_r($array[1]);

Array
(
    [0] => 1.0.0.1
)

如果你不用正则表达式就能解决问题 - 你必须这样做。因为这个函数很重,不可预测。

例如,用双引号分隔字符串(如果字符串有严格的格式):

$parts = explode('"', '[assembly: AssemblyVersion("1.0.0.1")]');
echo $parts[1];