【问题标题】:How to use preg_match to extract a version number and date from a string?如何使用 preg_match 从字符串中提取版本号和日期?
【发布时间】:2021-07-06 16:25:57
【问题描述】:

我有这个字符串:

= 1.0.2 - 2021-01-18 =

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

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

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

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

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

【问题讨论】:

  • 请提供 3 到 5 个不同的输入字符串,以显示您的数据可能会如何变化。然后从每个输入中提供您想要的确切输出。我们看不到您当前的代码在哪里失败(除了您不适应领先的=

标签: php preg-match


【解决方案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 的答案可能更好。

【讨论】:

  • ...甚至/([\d.]+)[\s-]+([\d-]+),如果我们不进行任何类型的验证(纯粹提取严格格式化的字符串。我希望有更多示例数据,以便我们可以看到传入文本。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    相关资源
    最近更新 更多