Как правильно составить регулярки?

Друзья, подскажите, пожалуйста, как правильно записать регулярку?
есть три варианта даты:
2016-00-00
2015-10-00
2015-12-23
пишу регулярки, чтобы определить, какая дата попадается в цикле:
if (preg_match('/^([0-9]?[1-9]+)-([0-9]?[1-9]+)-([1-9]+)$/', $reldate)) {
echo "555 - ".$reldate."<br />";
} elseif (preg_match('/^([0-9]?[1-9]+)-([0-9]?[1-9]+)-00$/', $reldate)) {
echo "777 - ".$reldate."<br />";
}

Но регулярки не работаю.. Я так понимаю из-за того, что каждое множество внутри скобок имеет абсолютную позицию? т.е. ([0-9]?[1-9]+) не true, при 10, но будет true, при 01-09 или 1-9?
Как убрать правило позиций в регулярках?
Или может быть есть лучше решение? Мне нужно проверить каждые скобки "(год)-(месяц)-(день)" на наличие цифры больше 0...
Заранее большое спасибо!
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 3
Ну что бы он их увидел (даты) работает так https://regex101.com/r/gI6vG8/3 что бы больше нуля не понял, в дате года же обязательно есть ноль...
Ответ написан
@tplus
[1-9]\d{3,}-[1-9]\d{1}-[1-9]\d{1}

Про больше нуля тоже не понял. Если нужно, чтобы не было 0 в начале ГМД, тогда так: https://regex101.com/r/kA2jF8/1
Ответ написан
@nnnice
Чтобы работать с регулярными выражениями, используйте специальные сервисы, которые не только "подчеркивают" ошибки, но и помогают разобраться, что не так. Там и примеры есть в этих сервисах в качестве небольших шпаргалок для начинающих, и поддержка самых разных ЯП. Самая популярная штука, это regex101, конечно. Поддерживает PHP, JavaScript, Golang и Python + есть генератор кода с поддержкой C#, Java, Ruby, Rust, Perl. RegexPlanet, из российских можно Planetcalc поклацать. Ссылки на эти и прочие беру отсюда:регулярные выражения и все о них собрано в одном месте. Будут вопросы - пишите, на все отвечу и разобраться в сервисах помогу. Удачи!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы