2

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

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

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

例子:

foob​​ar_1453887550.jpg(匹配)

foob​​ar_1453887620.8717.jpg(匹配)

foob​​ar_123.jpg(不匹配)

foob​​ar_adsf123123.jpg(不匹配)

4

2 回答 2

2

使用添加可选组?

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 ); 
于 2016-01-27T09:52:35.797 回答
0

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

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

{9,}匹配先前的匹配项(在本例中为 digit [0-9]),重复 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

于 2016-01-27T10:09:30.847 回答