簡體   English   中英

如何創建匹配正則表達式模式的時間

[英]How to create a time matching Regex pattern

我一直在寫一個java程序。 在程序中,我正在接受用戶的輸入,這是一個時間。 我將輸入作為字符串並檢查它是否與模式匹配。 我想要的格式是格式:上午10:15

這是我嘗試但它似乎不起作用。

public static boolean checkTimePattern(String time) {
    Pattern pattern = Pattern.compile("\\d{1}:\\d{1}^[A]{1}[M]{1}");
   if(pattern.matcher(time).matches()){
       return true;
   }else{
       return false;
   }
}

謝謝。

只需停在那里。 Java已經有一種機制來解析包含日期/時間值的字符串。

它是好的學習正則表達式,但使用它們已存在於框架的東西。 SimpleDateFormat已經為您做的相比,您的解決方案總是有缺陷的!

你的正則表達式只允許1小時數字和1分鍾數字,並且需要在A之前出現字符串的開頭。 這沒什么意義。

驗證時間(或日期)的最佳方法,使用SimpleDateFormat

String s = "10:15 AM";
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
sdf.setLenient(false);
try {
   Date dt2 = sdf.parse(s);
   System.out.println(dt2);
}
catch (Exception exc) {
    System.out.println(s + " IS NOT VALID TIME");
}

如果您一定要使用正則表達式,請使用

//Regex
String pat = "[0-1]?[0-2]:[0-5][0-9]\\s*[Aa][Mm]";
if (s.matches(pat)){
    System.out.println("Regex matches the string!");
}

(其中[0-1]?[0-2]匹配012小時, [0-5][0-9]匹配059分鍾, \\\\s*匹配零個或多個空格, [Aa][Mm]匹配AmAMaM或者am ,如果一個領先的0是必需的,去掉?從之后[0-1]

請參閱Java演示

  1. 你為什么用^ 沒有用。 一個Exponent用於在字符串開頭處斷言位置,但我沒有看到任何使用它來匹配時間。

  2. 數字為12位數。 \\d{1}表示只有一個數字。 您應該使用\\d{1,2}來表示一個或兩個最大數字。

  3. 沒有必要按{1}跟隨[A] 它本身意味着只有一個角色而且是A 如果你想添加對PM支持,那么你可以使用[AP]然后只需[M]或簡單地使用M

您可以使用此RegEx

\d{1,2}:\d{1,2}\s[AP][M]

轉義格式為:

\\d{1,2}:\\d{1,2}\\s[AP][M]

DEMO

在使用正則表達式時,有些事情未被您正確理解

1.)^是正則表達式的保留字符,因此在使用它時必須將其轉義。 雖然它在這里使用不正確,但仍然如果你想工作,使用反斜杠()來逃避它。

所以表達式(雖然仍是不正確 ,但應該是這樣的)

         \\d{1}:\\d{1}\^[A]{1}[M]{1}                        <- Watch carefully \^

2.) @ GhostCat建議是正確的,在這里使用SimpleDateFormat。

3.)如果您仍然希望繼續使用正則表達式,它應該看起來與模式匹配。

        \\d{2}:\\d{2}\\s+(AM|PM)

現在逐一了解正則表達式

\\\\ d {2} - >這說兩位數

- >這表示兩位數之后的冒號

\\\\ d {2} - >這說兩個數字正好在冒號之后

\\\\ s + - >這說不匹配。 在XX:XX之后的空格字符,你可以跳過它,因為它只是為了讓你的正則表達式更強大。

(AM | PM) - >這是一個捕獲組,並表示匹配AM OR(|)PM和其他任何內容。

你應該先測試你的正則表達式,試試http://rubular.com/

\d{2}[:]\d{2}\s*[A][M] //should work, this is the general regex

不要把^,在中間,這意味着字符串的開頭,($表示結束檢查rubular.com屏幕底部的指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM