正規表現で時間の部分のみを認識する方法

このQ&Aのポイント
  • 正規表現を使って、「17:00:00」という文字列の中から「17:00」の部分だけを取り出し、時間として認識する方法を教えてください。
  • 作成したプログラムで「17:00:00」を判定した結果、falseが返されてしまい、困っています。どうすれば正しく判定できるか、教えてください。
  • 指定した時間の書式(hh:mm)の文字列を正規表現で検証するプログラムを作成していますが、うまく動いていません。修正方法を教えてください。
回答を見る
  • ベストアンサー

時間の正規表現

正規表現で、17:00:00という文字の17:00(時:分)の部分だけを見て、時間として認識させたいのですが、どのように記述すればいいのでしょうか? 以下のプログラムを作成したのですが、なぜかfalseが返されてしまって困っています。 教えてください。宜しくお願いいたします。 String str_time = "17:00:00"; String str = "([0-9]|([0-1][0-9]|[2][0-3]))[:][0-5][0-9]"; Pattern pat = Pattern.compile( str ) ; Matcher mat = pat.matcher( str_time ) ; if( mat.matches() ){ // 処理 }

  • jobvba
  • お礼率60% (166/274)
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • pdragon
  • ベストアンサー率35% (5/14)
回答No.1

正規表現の末尾が足りないかな String str = "([0-9]|([0-1][0-9]|[2][0-3]))[:][0-5][0-9].*"; (閏秒がどうなるかはわかりませんが :-P)

jobvba
質問者

お礼

末尾を忘れていました・・・ ありがとうございました!解決しました!

関連するQ&A

  • 正規表現の検索について

    正規表現のエスケープしなければいけない文字が文字列に含まれているかどうかをチェックしたいのですがうまくいきません。 今は、下記のようにしてnoと表示されます。 よろしくお願いします。 String str ="(1)test"; Pattern p; Matcher m; p = Pattern.compile("\\(1\\)"); m = p.matcher(str); if(m.matches()) { System.out.println("ok"); }else{ System.out.println("no"); }

    • ベストアンサー
    • Java
  • 正規表現

    String u = "http://~~~~"; Pattern ptn = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+",Pattern.CASE_INSENSITIVE); Matcher objMch = ptn.matcher(u); if (!objMch.matches()) return "error"; とした場合、 普通のURLなら大丈夫ですが、http://......?a=1&... などのようにパラメータが付くと error がかえされます。 ということで、? や & などでパラメータが付いても error が帰らないようにする正規表現を教えてください。お願いします。

    • ベストアンサー
    • Java
  • java正規表現 matchesがおかしい(バージョンの違い?)

    java正規表現 matchesがおかしい(バージョンの違い?) 正規表現を学びだしたところなのですが、patternのmatchesが上手くいきません。 このページ http://www.site-cooler.com/java/j2se/regex.htm に書かれている、 Pattern pattern = Pattern.compile("^Hello"); Matcher matcher = pattern.matcher("Hello World. This is regex sample."); boolean blnMatch= matcher.matches(); System.out.println(blnMatch); を実行してもfalseが返ってきてしまいます。 これはバージョンの違いからくるものなのでしょうか? ちなみに私はjre1.6でeclipse3.5を使用しています。 回答をよろしくお願いします。

    • ベストアンサー
    • Java
  • 日本語の正規化表現

    urizakaです J2SDK1.4から正規表現が標準についたと知り、さっそくカタカナエラーチェックのためのBeanを作ってみたのですが、どんな文字列(カタカナ、英語、ひらがな…etc)と比較させても「False」しか戻ってこないという状態で、うまく行きません。 /** *カタカナエラーチェック:カタカナは使われているかどうか? *@param s 調べる **/ public boolean checkKkana(String s){ Pattern pattern = Pattern.compile("[^アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨワヲン]"); Matcher matcher = pattern.matcher(s); boolean check = matcher.matches(); return check; } } もしかすると、日本語を処理するのには特別な方法が必要なのでしょうか? すみませんが、よろしくお願いします

    • ベストアンサー
    • Java
  • 正規表現について

    現在下記のように文字列をチェックする正規表現を作成したのですが、 「禁止文字を含まない」と表示されてしまいます。 どこが問題なのか、指摘していただければと思います。 よろしくお願いします ---------------------------------------------------- // チェックする文字列 String str = "abc\"; // 禁止文字 String regex = "\\/:;\\*?'\"<>\\|~\\\\" + "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨワヲンァィゥェォッャュョ゛゜ー、。「」・" + "(1)(2)(3)(4)(5)(6)(7)(8)(10)(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)" + "IIIIIIIVVVIVIIVIIIIXXiiiiiiivvviviiviiiixx" + "ミリキロセンチメートルグラムトンアールヘクタールリットルワットカロリードルセントパーセントミリバールページmmcmkmmgkgccm2" + "〝〟No.K.K.TEL(上)(中)(下)(左)(右)(株)(有)(代)明治大正昭和平成∮∑∟⊿"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); // if (m.find()){ out.println("禁止文字を含む"); }else{ out.println("禁止文字を含まない"); }

    • ベストアンサー
    • Java
  • URL\正規表現@java

    perlメモさん?にPerlでのURLの正規表現はあるのですが Javaで使いたいと思います。 Pattern pattern = Pattern.compile("正規表現"); Matcher matcher = pattern.matcher(String); のステートメントを使う方法をご存知な方おられませんか? Perlメモさん?の正規表現をエディタにコピペしても 不正なエスケープエラー?がでてだめでした。 (http Urlのごちゃごちゃした奴の下から二番目) (「\b(?:」で始まる奴です) なのでエディタに貼り付けて\を\\に置き換えたものを 正規表現の部分にしたところコンパイルはとおりましたが、 正確にマッチしてくれませんでした。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 半角記号、全角記号を含む正規表現を作れなくて困っています。

    システムの入力チェックのために !"#$%&'()=~|`{+*}<>?_-^\@[;:],./ !”#$%&’()=~|‘{+*}<>?_-^¥@「;:」、。・ などの半角記号、全角記号を1個以上含むとtrueを返す 正規表現を作りたいのですが、うまくできなくて困っています。 以下の[ ]に入れる値で、何か良いものはありませんか? Boolean b = Pattern.compile("[ ]+").matcher(input).matches();

    • ベストアンサー
    • Java
  • 正規表現で入力チェックするには。

    正規表現を使用して入力チェックをしようと考えていますが特殊記号文字がうまくいきません。 [0-9a-zA-Z]で英数字はチェックする事ができたんで下記の特殊文字を指定するとエラーになってしまい困っています。 「!"#$%&'()=~|`{+*}<>?_-^\@[;:],./」 ロジックは以下のように記述しています。 Pattern p = Pattern.compile("[0-9a-zA-Z!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./]"); Matcher m = p.matcher("文字列"); if(m.matches() == true){   System.out.println("1"); } else{   System.out.println("2"); } ※「\」と「"」はエスケープしています。 下記のエラーメッセージが表示されてなんとなくですが正規表現でエラーになっているのはわかるんですが・・・ Illegal character range near index 32 [0-9a-zA-Z!"#$%&'()=~|`{+*}<>?_-^\@[;:],./]                       ^ 申し訳ありませんがアドバイスいただけませんでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • 1文字以上のアルファベットが入力されているかチェックするには

    正規表現で1文字以上のアルファベットが含まれているかを確認する事はできますか? 1234567890 → × a123456789 → ○ 1234a56789 → ○ 123456789a → ○ a123b4567c → ○ import java.util.regex.*; Pattern pattern = Pattern.compile("?a-zA-Z{1,}?"); Matcher matcher = pattern.matcher("文字列"); if(matcher.matches()==false){   return "NG"; } アドバイス宜しくお願いします。

    • ベストアンサー
    • Java
  • 正規表現の表現方法について

    じゃんけんの手を正規表現での表現方法について。 それぞれの手を定数で表現しています。場にじゃんけんの手が012と出たときに並び替えた120や210もパターン認識させたいと考えています。 正規表現の記述について教えていただきたいです。 現在のコード package game; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { // ユーザーの手を格納する変数 private static int playerhand; private static int user1hand; private static int user2hand; // 各々の勝数 private static int playercount = 0; private static int user1count = 0; private static int user2count = 0; // ジャンケンの手を表す定数を宣言する private static final int STONE = 0; private static final int SCISSORS = 1; private static final int PAPER = 2; // 判定する文字列 private static String checkhand = null; public static void main(String[] args) { // ここでじゃんけんさせる playerhand = STONE; user1hand = PAPER; user2hand = STONE; // 判定する文字列 checkhand = String.valueOf(playerhand) + String.valueOf(user1hand) + String.valueOf(user2hand); System.out.println(checkhand); // 判定するパターンを用意 // 引き分けパターン Pattern draw = Pattern.compile("([0]&[1]&[2])|([0]&[0]&[0])|([1]&[1]&[1])|([2]&[2]&[2])"); // 2人勝ちパターン Pattern win2 = Pattern.compile("([0]&[0]&[1])|([1]&[1]&[2])|([2]&[2]&[0])"); // 1人勝ちパターン Pattern win1 = Pattern.compile("([0]&[1]&[1])|([1]&[2]&[2])|([2]&[0]&[0])"); // パターンとの一致を確認するための準備 Matcher checkdraw = draw.matcher(checkhand); Matcher checkwin2 = win2.matcher(checkhand); Matcher checkwin1 = win1.matcher(checkhand); if (checkdraw.find()) { System.out.println("引き分けパターン"); } else if (checkwin2.find()) { System.out.println("2人勝ちのパターン"); checkWin2(); } else if (checkwin1.find()) { System.out.println("1人勝ちのパターン"); checkWin1(); } } /** * 1人勝ちで勝者の勝数を増やすメソッド * */ public static void checkWin1() { if (playerhand == user1hand) { user2count++; } else if (user1hand == user2hand) { playercount++; } else { user1hand++; } } /** * 2人勝ちで勝者の勝数を増やすメソッド */ public static void checkWin2() { if (playerhand == user1hand) { playercount++; user1count++; } else if (user1hand == user2hand) { user1hand++; user2hand++; } else { playercount++; user2count++; } } } ※OKWAVEより補足:「Webシステム開発」についての質問です。

    • ベストアンサー
    • Java

専門家に質問してみよう