Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式,时间模式_Java_Regex - Fatal编程技术网

Java正则表达式,时间模式

Java正则表达式,时间模式,java,regex,Java,Regex,我试图得到一个正则表达式,其中包含以下组合: 1h 2m 3s 1h 2m 1h 2m 3s 2m 3s 到目前为止,我有下一个:(\d+h\s?)(\d+m\s?)(\d+s\s?),但它工作不正常 谁能给我一个主意吗?希望这会有帮助。在这里,我们使用三种组合来防止匹配错误的模式,如1h 3s,因为在预期OP的问题中没有提到 或者,如果您想将数字限制为仅两位数,可以将此\d+更改为\d{2} 正则表达式:^\d+[hms]$| ^\d+[h]\s\d+[m](?:\s\d+[s]

我试图得到一个正则表达式,其中包含以下组合:

1h 
2m 
3s 
1h 2m 
1h 2m 3s 
2m 3s
到目前为止,我有下一个:(\d+h\s?)(\d+m\s?)(\d+s\s?),但它工作不正常


谁能给我一个主意吗?

希望这会有帮助。在这里,我们使用三种组合来防止匹配错误的模式,如
1h 3s
,因为在预期OP的问题中没有提到

或者,如果您想将数字限制为仅两位数,可以将此
\d+
更改为
\d{2}

正则表达式:
^\d+[hms]$| ^\d+[h]\s\d+[m](?:\s\d+[s])?$| ^\d+m\s\d+s$

1.
^
字符串的开头

2.
$
字符串结束

3.
\s
用于单个空格

4.
^\d+[hms]$
一个或多个数字,然后是
h
m
s

5.
^\d+[h]\s\d+[m](?:\s\d+[s])?$
这将匹配
数字
然后
h
,然后
数字
然后
m
最后
数字
然后
s
,这是可选的

6.
^\d+m\s\d+s
这将匹配
数字
然后
m
然后
数字
然后
s

试试这个正则表达式:

(?:\d+h)(?: \d+m(?: \d+s)?)?|\d+m(?: \d+s)?|\d+s
说明:

(?:\d+h)(?: \d+m(?: \d+s)?)?     match 1h or 1h 2m or 1h 2m 3s
\d+m(?: \d+s)?                   match 2m or 2m 3s
\d+s                             match 3s
按照下面的链接查看Java代码,根据示例输入演示此正则表达式


通过使用|对感兴趣的匹配项进行分组,可以将字符串的有效部分与各自组中捕获的h、m和s进行匹配,以便检查特定行是否具有特定值。这是一种很好的方法,可以完成可选匹配和完整匹配

(?:\ ?(?:(\d+h)|(\d+m)|(\d+s)))+

()

您的正则表达式在链接中工作,但在代码中不工作。请检查是否有任何解释?@YCF\L我相信我已经解决了这个问题。