- PR -

正規表現の利用

1
投稿者投稿内容
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2006-07-21 19:20
正規表現の書き方で悩んでおります
0〜9、a〜z(小文字)、半角ピリオドのみを許す正規表現の書き方なんですが
Pattern p = Pattern.compile("[0-9a-z]");
0〜9、a〜z(小文字)まではこれでいいと思うのですが
boolean ret;
String input="0123456789abcdz";
ret = p.matcher(input).matches();
retにはFalseが帰ってきます

いろいろと調べているのですが、どうもよくわかりません
また、半角ピリオドをこれに追加する方法わかりません
ご存知の方がいらっしゃればご教授願います
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-07-21 19:35
いろいろと調べなくても Pattern クラスのJavadocだけで十分ですよ。

特に以下の内容はよく読んでいますか?
- 文字クラス
- 定義済みの文字クラス
- 最長一致数量子
- 最短一致数量子
- バックスラッシュ、エスケープ、および引用
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-07-21 20:38
正規表現の知識なしでAPIドキュメントを読んでもわかりにくいかもしれないですね。

文字クラス[〜]は、1文字のみにマッチします。ですので、Natsumeさんが書かれたパターンはinputが1文字のときしかマッチし得ません。

ピリオドに関しては、何も考えずそのまま文字クラスの最後にでも追加すれば良いです。
linx
会議室デビュー日: 2006/02/02
投稿数: 9
投稿日時: 2006-07-22 02:36
自分は↓を参考にしました。
http://www.hellohiro.com/regex.htm
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-07-23 10:02
引用:

0〜9、a〜z(小文字)、半角ピリオドのみを許す正規表現の書き方なんですが


matches()メソッドの動作なのですが、
「入力シーケンス全体がこの正規表現エンジンのパターンとマッチした場合にかぎり、true」
となっているので、文字列データの先頭から末尾まで全て一致する正規表現でなければ
trueにはなってくれません、昔ハマりました。

コード:
		Pattern p = Pattern.compile("^[\\.0-9a-z]+"); 
		String input="012345.6789abcdz";
		System.out.println(p.matcher(input).matches()); 



「^」と「+」を付けて、
「文字列の先頭から末尾まで半角英数字または半角ピリオドの場合trueを返す」
という意味にすることでマッチします。
また
コード:
		Pattern p = Pattern.compile("^[\\.\\da-z]+"); 


というように、定義済みパターンを使った表現もできますよ。

1

スキルアップ/キャリアアップ(JOB@IT)