有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java正则表达式,时间模式

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

1h 
2m 
3s 
1h 2m 
1h 2m 3s 
2m 3s

到目前为止,我还有下一个:(\d+h\s?)?(\d+m\s?)?(\d+s\s?),但它并不好用

谁能给我一个主意吗


共 (2) 个答案

  1. # 1 楼答案

    通过将有趣的匹配项与|进行分组,可以将字符串的有效部分与h、m和s进行匹配,每个h、m和s都在各自的组中捕获,这样就可以检查特定的行是否具有特定的值。这是一个很好的方法,可以在完全匹配的情况下进行可选匹配

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

    regex101

  2. # 2 楼答案

    试试这个正则表达式:

    (?:\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代码,根据示例输入演示这个正则表达式

    Rextester