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

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

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

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

正規表現

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

Q&A

3回答

7327閲覧

Javaでの正規表現について質問です。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

正規表現

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

0グッド

2クリップ

投稿2015/11/10 14:52

編集2022/01/12 10:55

Javaでの正規表現について質問です。
半角数字またはハイフンで構成されているか判定するための正規表現を作りたいです。
1-12345 ==true
12345 ==true
1-2-3-4-5==true
よろしくお願いいたします。

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

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

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

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

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

kei344

2017/04/16 10:54

回答が付いた質問の編集は慎重に行ってください。タイプミス程度なら修正する事もありますが、本文を削除するのはやめましょう。
guest

回答3

0

"[0-9-]+"ではないでしょうか?

投稿2015/11/10 14:56

swordone

総合スコア20649

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

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

KiyoshiMotoki

2015/11/10 15:02

Javaの場合、"\"自体をエスケープしてやる必要がありますので "[0-9\\-]+" ですね。
KiyoshiMotoki

2015/11/10 16:55 編集

otn様のご指摘の通り、この場合のハイフンはエスケープ不要でした。 失礼しました。
guest

0

"[0-9-]+"だと、「数字かハイフンを含んだ文字列」なので違いますね。"A1"等もマッチします。
「数字かハイフンだけで出来ている文字列」の場合は、"\A[0-9-]+\z" です。
なお、この場合ハイフンはエスケープ不要です。

投稿2015/11/10 16:30

otn

総合スコア84423

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

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

KiyoshiMotoki

2015/11/10 16:54 編集

どういうわけかは分かりませんが、JavaのPatternクラスを使用した場合、明示的に境界を指定しない場合は入力文字列全体とのマッチングを試みるようです。 import java.util.regex.Pattern; public class Main { public static void main(String[] args) { final Pattern pattern = Pattern.compile("[0-9-]+"); System.out.println(pattern.matcher("13-2").matches()); System.out.println(pattern.matcher("1-2-3").matches()); System.out.println(pattern.matcher("0").matches()); System.out.println(pattern.matcher("202a").matches()); System.out.println(pattern.matcher("b333").matches()); } } 出力結果 true true true false false JDK1.6での動作結果です。 私もkatoy様の回答に同様の指摘をさせていただきましたが、 これはkatoy様の回答がPHPやJavascriptを意識したものだと見受けたためです。 > この場合ハイフンはエスケープ不要です。 は、ご指摘の通りですね。 ありがとうございます。
KiyoshiMotoki

2015/11/10 17:13

java1様のご質問から、だいぶ話題が離れてまいりましたがw > JavaのPatternクラスを使用した場合、明示的に境界を指定しない場合は入力文字列全体とのマッチングを試みるようです。 の理由が分かりました。 Matcher#matches() メソッドのAPIリファレンスの記述 > 【領域全体を】このパターンとマッチします。 が、その理由のようです。 https://docs.oracle.com/javase/jp/6/api/java/util/regex/Matcher.html#matches() 実際、matches()メソッドとfind()メソッドとでは、以下のように実行結果が異なりました。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { final Pattern pattern = Pattern.compile("[0-9-]+"); System.out.println(pattern.matcher("202a").matches()); System.out.println(pattern.matcher("b333").matches()); Matcher matcher1 = pattern.matcher("202a"); System.out.println(matcher1.find()); System.out.println(matcher1.group()); Matcher matcher2 = pattern.matcher("b333"); System.out.println(matcher2.find()); System.out.println(matcher2.group()); } } 実行結果 false false true 202 true 333
otn

2015/11/10 22:45

なるほど。思い込みは駄目ですね。 勉強になりました。
guest

0

http://okumocchi.jp/php/re.php
のような正規表現を試せるページが、いくつも web 上にあります。

A や B だけから構成される文字列の為の正規表現は
/(A|B)*/
です。
これをヒントにすると 数字と - だけからなる文字列の為の正規表現を作ることができると思います

投稿2015/11/10 15:00

katoy

総合スコア22324

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

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

KiyoshiMotoki

2015/11/10 15:16

これだと"Ahogeや"Bfuga"にもマッチしてしまいます。 また、本件ではマッチした文字をキャプチャしないので"()"を使う必要はなく、 "[AB]"で十分です。
katoy

2015/11/10 21:32

> ... キャプチャしないので"()"を使う必要はなく ... あ!、そうですね。間違えました。 [A|B]* ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問