Java 检查字符串是否与特定正则表达式匹配

Java 检查字符串是否与特定正则表达式匹配,java,regex,string,Java,Regex,String,我不太擅长正则表达式之类的东西,所以我需要帮助。我必须检查输入值是否与特定的正则表达式格式匹配。这是我想要使用的格式,25D8H15M。这里的D表示天数H表示小时,M表示分钟。我需要正则表达式来检查字符串。谢谢简化的正则表达式可以是: ^\\d{1,2}D\\d{1,2}H\\d{1,2}M$ 简化的正则表达式可以是: ^\\d{1,2}D\\d{1,2}H\\d{1,2}M$ 试试看 试试看 下面是编写正则表达式的最简单方法: if (str.matches("(?!$)(\\d+D)?(

我不太擅长正则表达式之类的东西,所以我需要帮助。我必须检查输入值是否与特定的正则表达式格式匹配。这是我想要使用的格式,
25D8H15M
。这里的
D
表示天数
H
表示小时,
M
表示分钟。我需要正则表达式来检查字符串。谢谢

简化的正则表达式可以是:

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

简化的正则表达式可以是:

^\\d{1,2}D\\d{1,2}H\\d{1,2}M$
试试看

试试看


下面是编写正则表达式的最简单方法:

if (str.matches("(?!$)(\\d+D)?(\\d\\d?H)?(\\d\\d?M)?"))
    // format is correct
这允许每个部分都是可选的,但是在开始时输入结束时的负面展望意味着必须有一些东西

请注意,使用java不必编写输入的开始(
^
)和结束(
$
)代码,因为
String.matches()
必须匹配整个字符串,因此开始和结束都是隐含的

然而,这只是一个基本的正则表达式,因为
99D99H99M
将通过。有效格式的正则表达式为:

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

这将小时和分钟限制为
0-59
,允许范围
0-9
中的值可选前导零以下是对正则表达式进行编码的最简单方法:

if (str.matches("(?!$)(\\d+D)?(\\d\\d?H)?(\\d\\d?M)?"))
    // format is correct
这允许每个部分都是可选的,但是在开始时输入结束时的负面展望意味着必须有一些东西

请注意,使用java不必编写输入的开始(
^
)和结束(
$
)代码,因为
String.matches()
必须匹配整个字符串,因此开始和结束都是隐含的

然而,这只是一个基本的正则表达式,因为
99D99H99M
将通过。有效格式的正则表达式为:

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


这将小时和分钟限制为
0-59
,允许范围
0-9
中的值可选前导零,我不明白。为什么要投否决票!!这是一个建设性的问题,可能被否决了(不是我),因为你没有努力尝试一个解决方案,甚至没有努力描述其中的关键点。@Bohemian,我需要做的是:检查给定的字符串是否有效,有效值是:1D-2D15H-5H33M-22D30M-15D12H45M等。所以所有部分都是可选的,但必须至少有一部分?
3D5M
有效吗?天数部分是否有一个最大数值?好的-请参阅我的更新答案,该答案满足您的扩展要求。我不明白。为什么要投否决票!!这是一个建设性的问题,可能被否决了(不是我),因为你没有努力尝试一个解决方案,甚至没有努力描述其中的关键点。@Bohemian,我需要做的是:检查给定的字符串是否有效,有效值是:1D-2D15H-5H33M-22D30M-15D12H45M等。所以所有部分都是可选的,但必须至少有一部分?
3D5M
有效吗?天数部分是否有一个最大数值?好的-请参阅我满足扩展要求的更新答案Hanks@anubhava了解答案,但我有一个问题,花括号中的数字是什么意思?
\\d{1,2}
表示匹配1或2个数字这些数字表示匹配模式的下限和上限。谢谢@anubhava的回答,不过我有一个问题,花括号中的数字是什么意思?
\\d{1,2}
表示匹配1或2位数字这些数字表示匹配图案的下限和上限。它还将匹配
111125d8h15mmm
@anubhava,nope,我刚刚测试过。
String#matches
添加了
^和$
,但是如果在模式中使用相同的正则表达式,那么它将匹配更大的字符串。@anubhava使用java时,您不必对输入的开始(^)和结束($)进行编码,因为
String.matches()
必须匹配整个字符串,所以开始和结束都是implied@Masud这里不需要字符类,即
\\d{1,2}
[\\d]{1,2}
相同,因为它只匹配一个字符(类型)
111125d8h15mmm
@anubhava,nope,我刚刚测试过。
String#matches
添加了
^和$
,但是如果在模式中使用相同的正则表达式,那么它将匹配更大的字符串。@anubhava使用java时,您不必对输入的开始(^)和结束($)进行编码,因为
String.matches()
必须匹配整个字符串,所以开始和结束都是implied@Masud这里不需要字符类,即
\\d{1,2}
[\\d]{1,2}
相同,因为只有一个字符(类型)