如何使用 Regex 匹配字符串中的 PHP time() 或 microtime()?

How to use Regex to match PHP time() or microtime() in a string?

我目前有一个匹配字符串中 php 时间的正则表达式命令:

preg_match( '/([a-z]+)_([0-9]{9,})\.jpg/i', $aName, $lMatches );

我如何修改它以在同一匹配中也匹配 microtime()?

示例:

foobar_1453887550.jpg(匹配)

foobar_1453887620.8717.jpg(匹配)

foobar_123.jpg(不匹配)

foobar_adsf123123.jpg(不匹配)

使用 ? 添加可选组:

preg_match( '/([a-z]+)_([0-9]{9,})(\.[0-9]{4,})?\.jpg/i', $aName, $lMatches );

这里 (\.[0-9]{4,})? 是一个可选组,它可以出现或不出现在您的字符串中。

考虑到@trincot 的评论,如果结束零不会在毫秒内出现,您可以将可选组更改为 (\.[0-9]+)?

preg_match( '/([a-z]+)_([0-9]{9,})(\.[0-9]+)?\.jpg/i', $aName, $lMatches ); 

首先,你上面的正则表达式不应该匹配第二个例子:foobar_1453887620.8717.jpg

现在如果你想让它匹配小于9的数字,'_'之后,你需要根据需要修改{9,}

{9,} 匹配前面的匹配项(在本例中为数字 [0-9]),重复九次或以上。

  • 将您的第二个示例(foobar_1453887620.8717.jpg) 匹配,你的正则表达式应该是:
    /([a-z]+)_([0-9.]{9,})\.jpg/i
  • 匹配你的第三个例子(foobar_123.jpg):
    /([a-z]+)_([0-9]{3,})\.jpg/i

  • 匹配你的第四个例子(foobar_adsf123123.jpg):
    /([a-z]+)_([0-9\w]{3,})\.jpg/i

  • 要匹配您上面的所有示例:
    /([a-z]+)_([0-9.\w]{3,})\.jpg/i