В настоящее время у меня есть команда regex, которая соответствует времени 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]
), повторяется девять раз или выше.
/([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