Как использовать Regex, чтобы соответствовать PHP time () или microtime () в строке?

В настоящее время у меня есть команда 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 (не соответствует)

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 );
2

Другие решения

Прежде всего, ваше регулярное выражение не должно соответствовать второму примеру: 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

0

По вопросам рекламы [email protected]