質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

4回答

3810閲覧

正規表現について(1から99999以外をはじく)

tammy

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2018/07/02 10:40

編集2018/07/02 10:42

前提・実現したいこと

正規表現を使って条件を指定したい。

具体的には、1つ目と2つ目の数字をコンソールで入力し、その2つを足した合計値を出力させたいです。
入力条件が2つあって「0から始まる際もはじく」「半角数字5桁」です。
条件を指定する際に、正規表現を使用したいです。

発生している問題

現状考えついた正規表現です。
/[^0-9]{6,} | [^0-9] +| ^[^0-9]+[0-9]+ | ^[0-9]+[^0-9]+|0+./

ただこれだと、「1a2b3」のような混ざり合った文字列が排除できません。
無駄に長いような感じもして、スマートにかつ的確に書く方法はないかと模索中です。
初歩的な質問で申し訳ないですのですが、お力添えいただけたらと思います。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oikashinoa

2018/07/02 13:08

ベストアンサー付きましたが、ご自身が書いた正規表現は何が悪かったか確認されてますか?
tammy

2018/07/02 13:48

追記ありがとうございます。どこの位になんの数字が欲しいかうまく指定できていなかったところでしょうか。。。
oikashinoa

2018/07/02 13:55

確認してないってことですかね?or条件(|)を外して、一つづづ正規表現でMatchさせて動きを確認したほうがいいですよ。苦手意識が付いたら多分この先 正規表現は使わななくなるかも。正規表現は大変便利なので身につけておくと良いです。
tammy

2018/07/02 14:15

お恥ずかしいのですが、理解できていませんでした。お気遣いありがとうございます。おっしゃる通り既に苦手意識が付きそうですが、理解できるまでゆっくりでも確認したいと思います。
guest

回答4

0

^[1-9][0-9]{0,4}$
012なんかもはじくなら、これでいけるかと思います。
ただ、Pythonでしか試してないんで、どうぞあしからず。

投稿2018/07/02 11:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tammy

2018/07/02 13:04

ご回答ありがとうございます。 こちらのやり方でもできました。 今後の参考にさせていただきます。
退会済みユーザー

退会済みユーザー

2018/07/02 13:23

参考になってよかったです。
guest

0

よっばらっているので間違えていたらごめんなさい

[1-9][0-9]{1,4}
[1-9][0-9]{4}

最初の[1-9]で一文字目を1から9に限定
2文字目以降一文字以上最大4文字を0から9で望みの数列が取れると思いますよ。(ごめんなさい試してないです)

5桁が必須なら後者を使ってください

下記みたいなところでチェックすると分かりやすいですよ
https://www.google.co.jp/amp/s/nelog.jp/regular-expression-online-tools%3famp=1

投稿2018/07/02 10:52

編集2018/07/02 12:39
oikashinoa

総合スコア2826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tammy

2018/07/02 13:02

早速の回答ありがとうございます。 丁寧な解説とサイトも教えていただきありがとうございます。 ベストアンサーは投稿時間順に評価させて頂きましたが、大変参考になりました。
guest

0

ベストアンサー

[1-9][0-9]{0,4}で充分な気がしますが...

利用イメージ

Java

1import java.io.*; 2import java.util.regex.*; 3 4class Main { 5 static int myInput(BufferedReader br, String prompt, Pattern p) throws IOException { 6 String ret; 7 8 System.out.print(prompt); 9 while(true) { 10 ret = br.readLine(); 11 if(p.matcher(ret).matches()) { 12 break; 13 } 14 15 System.out.print(prompt); 16 } 17 18 return Integer.parseInt(ret); 19 } 20 21 public static void main(String[] args) throws IOException { 22 try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 23 System.out.println( 24 myInput(br, "1-99999: ", Pattern.compile("[1-9][0-9]{0,4}")) 25 ); 26 } 27 } 28}

投稿2018/07/02 10:46

編集2018/07/02 11:16
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tammy

2018/07/02 13:00

早速のご回答ありがとうございます。 無事解決しました。 利用イメージもいただきわかりやすかったです。
退会済みユーザー

退会済みユーザー

2018/07/02 22:09

System.out.print(prompt); は ループの開始直後にもっていかなかったのにはなにか理由があるんだろう(w・
LouiS0616

2018/07/03 02:46

@asahina1979 さん 再入力を求める際のメッセージをもともと別のものにしていた名残です。
guest

0

前後の余分な文字のことも配慮するほうが良いかもしれません。

\A[1-9]\d{4}\z"

実行例
イメージ説明

参考情報

  • 正規表現の基本

https://qiita.com/sea_ship/items/7c8811b5cf37d700adc4

投稿2018/07/02 21:27

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問