2013-11-26 102 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那里有

注意如何与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

尝试,

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'加上'^和$',但如果在Pattern中使用了相同的正则表达式,那么它会匹配更大的字符串。 – anubhava

相关问题