如何使用 preg_match 从字符串中提取版本号和日期?

How to use preg_match to extract a version number and date from a string?

我有这个字符串:

= 1.0.2 - 2021-01-18 =

我希望使用 preg_match 从中提取版本号和日期并将其放入数组中,我有以下代码,但我肯定在这里做错了:

preg_match('/^([\d.]+)[\- ](\d{4}-\d\d-\d\d) =/', $string, $match)

我不确定如何处理字符串中的 = 和中间的连字符,或者即使以上是否能成功匹配 3 位版本号和日期。

我期望 $match 包含版本号和日期的数组。

如何使用 preg_match 从字符串中获取数组中的数据?

我根本不会使用 preg_match。如果您只使用一些基本的字符串操作,这会更简单(也更快):

$s = '= 1.0.2 - 2021-01-18 =';
$s = trim($s, '= ');
$ss = explode(' - ', $s);

现在 $ss[0] 是版本,$ss[1] 是日期。

如果它不是可变的,就在模式中匹配你想要的。这假设版本可以是 10.1.204 等,日期将始终是 YYYY-MM-DD:

preg_match('/= (\d+\.\d+\.\d+) - (\d{4}-\d{2}-\d{2}) =/', $string, $match);

或对您的进行一些小的更正:

/= ([\d.]+)[\s-]+(\d{4}-\d\d-\d\d) =/

或者:

/^= ([\d.]+)[\s-]+(\d{4}-\d\d-\d\d) =/

然后查看$match[1]$match[2]。但是,trimexplode 的答案可能更好。