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

まず、上記の正規表現は 2 番目の例と一致しないはずです: foobar_1453887620.8717.jpg

9 未満の桁数に一致させたい場合は、'_' の後に、必要に応じて を変更する必要があり{9,}ます。

{9,}前の一致 (この場合は数字[0-9]) に一致し、9 回以上繰り返されます。

  • 2 番目の例 ( foobar_1453887620.8717.jpg ) を一致に含めるには、正規表現は次のようになります。
    /([a-z]+)_([0-9.]{9,})\.jpg/i
  • 3 番目の例 (foobar_123.jpg) に一致させるには:
    /([a-z]+)_([0-9]{3,})\.jpg/i

  • 4 番目の例 (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 に答える