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

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

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

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

正規表現

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

Q&A

解決済

1回答

1389閲覧

javaで小文字かどうかを正規表現で調べるときの質問

renji

総合スコア41

Java

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

正規表現

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

0グッド

0クリップ

投稿2018/09/29 14:02

編集2018/09/29 14:14

javaで正規表現の質問です。

String S = "abcdef"; Pattern pattern = Pattern.compile("[a-z]"); Matcher matcher = pattern.matcher(S);

というようなプログラムでSがすべて小文字かどうかを調べたいとき、

Pattern.compile("[a-z]");

の[a-z]では、一文字だけしか調べてくれないでしょうか?

Pattern.compile("^[a-z]+$");

とすると、^[a-z]+$で、^が先頭を表し、+が1回以上の繰り返し、$が末尾を表すと思うので、^[a-z]+$だと一文字以上の小文字を調べてくれるでしょうか?

一文字の小文字、または一文字以上の小文字の文字列を表したい場合は

Pattern.compile("^[a-z]*$");

として、^[a-z]*$で、*を用いれば0回以上の繰り返しを表すので、一文字も調べてくれるし、文字列も調べてくれる、という理解で良いでしょうか?
よろしくお願いします。

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

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

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

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

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

dice142

2018/09/29 14:08

+と*がごっちゃになってる説明がある気がするので、質問文を今一度チェックしてもらえますか?
dice142

2018/09/29 14:08

あとJavaの他に正規表現タグをつけると回答を得られやすいと思います。
renji

2018/09/29 14:13

承知致しました。タグを付けて、修正してから、質問文を見直してみます。
renji

2018/09/29 14:15 編集

タグを付けて、質問文を見直しました。+と*がごっちゃになっていましたので、修正しました。
guest

回答1

0

ベストアンサー

[a-z]では、一文字だけしか調べてくれないでしょうか?

はい。一文字です。

^[a-z]$で、^が先頭を表し、+が1回以上の繰り返し、$が末尾を表すと思うので、^[a-z]$だと一文字以上の小文字を調べてくれるでしょうか

半分、はい。

アンカー(^$)はまた別の働きを持ちます。
[a-z]+ だけで、一文字以上の小文字とマッチします。

^[a-z]*$で、*を用いれば0回以上の繰り返しを表すので、一文字も調べてくれるし、文字列も調べてくれる、という理解で良いでしょうか?

いいえ。
*の場合一度も繰り返さなくても良いので、空文字列にもマッチします。

投稿2018/09/29 14:12

LouiS0616

総合スコア35658

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

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

renji

2018/09/29 14:20

ありがとうございます。 *の0回以上という意味が直前の文字を0回以上繰り返す、という意味だと初めて気づきました。 とても勉強になりました。ありがとうございました。 あと、^と$のほかの働きなのですが、^は[^a-z]のように[ ] 内で用いると否定の意味になるのかな、と思うのですが、$は末尾を示す以外にどういう意味があるのでしょうか? もしよろしければ、教えて頂ければ幸いです。 よろしくお願いします。
LouiS0616

2018/09/29 14:28

私の知る限りでは、末尾を表す以外に$に特に意味は無いです。 ただし、MULTILINEモードを指定した際は、$は改行文字の直前にもマッチします。
renji

2018/09/29 14:35 編集

お答えいただき、ありがとうございます。 MULTILINEモードを初めて知りました! Pattern.MULTILINEや(?m)という知識を新たに知ることが出来ました! また、$の使用は基本的には末尾のみ(改行のパターンももちろん覚えておきます)という理解でプログラムの勉強を進めていきたいと思います。 教えていただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問