2013-11-26 6 views
0

Я не очень хорошо разбираюсь в регулярных выражениях и прочее, поэтому мне нужна помощь. Я должен проверить, соответствует ли входное значение определенному формату регулярного выражения. Вот формат, который я хочу использовать, 25D8H15M. Здесь D означает количество дней H означает часы, а M означает минуты. Мне нужно регулярное выражение для проверки строки. БлагодаряПроверьте, соответствует ли строка конкретному регулярному выражению

+0

Я не понимаю. Почему downvote !! Это конструктивный вопрос –

+0

Вероятно, нисходящий (не я), потому что вы не предприняли никаких усилий, чтобы попытаться решить проблему или даже описать ключевые точки одного. – Bohemian

+0

@Bohemian, что мне нужно сделать: проверьте, действительно ли данная строка действительна, допустимые значения: 1D - 2D15H - 5H33M - 22D30M - 15D12H45M и т. Д. –

ответ

4

Вот кратчайший способ кодирования регулярного выражения:

if (str.matches("(?!$)(\\d+D)?(\\d\\d?H)?(\\d\\d?M)?")) 
    // format is correct 

Это позволяет каждой части быть необязательными , но негативный взгляд на конец ввода в начале означает, что должно быть somethi ng есть.

Обратите внимание, как с Java вы не должны кодировать старт (^) и конец ($) входа, потому что String.matches() должен соответствовать строке в весь, так что начало и конец подразумеваемые.

Однако это просто рудиментарное регулярное выражение, потому что пройдет 99D99H99M. Регулярное выражение для действительного формате будет:

if (str.matches("(?!$)(\\d+D)?([0-5]?\\dH)?([0-5]?\\dM)?")) 
    // format is correct 

Это ограничивает часы и минуты до 0-59, позволяя дополнительным ведущим нулем для значений в диапазоне 0-9.

+0

Спасибо, это было то, что мне нужно. –

1

Упрощенное регулярное выражение может быть:

^\\d{1,2}D\\d{1,2}H\\d{1,2}M$ 
+0

спасибо @anubhava за ответ, у меня есть вопрос, что же означают цифры в фигурных скобках? –

+1

'\\ d {1,2}' означает соответствие 1 или 2 цифрам, эти числа означают нижний предел и верхний предел # совпадающих шаблонов. – anubhava

1

Try,

String regex = "\\d{1,2}D\\d{1,2}H\\d{1,2}M"; 
    String str = "25D8H15M"; 

    System.out.println(str.matches(regex)); 
+0

Он также будет соответствовать '111125D8H15MMMM' – anubhava

+0

@anubhava, нет, я только что протестировал. – Masudul

+0

'String # matches' добавляет'^и $ ', но если такое же регулярное выражение используется в шаблоне, оно будет соответствовать большей строке. – anubhava

Смежные вопросы