- PR -

正規表現について

投稿者投稿内容
CHAN10
会議室デビュー日: 2003/09/21
投稿数: 7
投稿日時: 2006-06-16 02:08
<質問>
aの文字列内にアスタリスクとアンダーバーと英数字以外のものが含まれていればerrorにしたいのですがパターンをどのようにかけばいいのでしょうか?

String a = "2659876";
if(!a.matches("\\**_*\\w*")){
System.out.println("error");
}else{
System.out.println("ok");
}


_________________
さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2006-06-16 02:20
[] が囲んだ文字に対して、どんな役割を果たすのか、
^ が右隣の文字に対して、どんな意味を持つのか
とりあえず上記の2点を勉強してみませう。
CHAN10
会議室デビュー日: 2003/09/21
投稿数: 7
投稿日時: 2006-06-16 04:24
返答ありがとうございます。
おそらく答えを聞いたら簡単な事だと思いますが、いまだ解決できません。
[]とはカッコ内の任意の一文字が一致するものを探し
^とは右隣の文字以外のものを探すと理解しております。
単純に考えると"[^\\w^\\*^_]"となるような気もするのですがうまくいきません。
luckseed
常連さん
会議室デビュー日: 2006/05/23
投稿数: 24
投稿日時: 2006-06-16 09:26
> []とはカッコ内の任意の一文字が一致するものを探し
1文字の比較なので探すという表現はおかしい気がしますが、その通りです。

> ^とは右隣の文字以外のものを探すと理解しております。
[]の先頭に^を付けると、[]内の文字が全て否定パターンとなります。
つまり、"[^\\w^\\*^_]"ではなく、"[^\\w\\*_]"になりますね。
それから\\wは_も含むので、[]内に_を入れる必要はありません。
"[^\\w\\*]"となりますが、これでは一文字なので、[]の後ろに*か+を付けてやりましょう。
CHAN10
会議室デビュー日: 2003/09/21
投稿数: 7
投稿日時: 2006-06-16 13:46
返答ありがとうございます。

String a = "265&%9876";
if(a.matches("[^\\w\\*]*")){
System.out.println("error");
}else{
System.out.println("ok");
}

上記のようにaの文字列の中に英数字以外のものを入れてみたのですがerrorになりません。何か他に足りないのでしょうか?
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-06-16 14:14
引用:

CHAN10さんの書き込み (2006-06-16 13:46) より:
返答ありがとうございます。

String a = "265&%9876";
if(a.matches("[^\\w\\*]*")){
System.out.println("error");
}else{
System.out.println("ok");
}

上記のようにaの文字列の中に英数字以外のものを入れてみたのですがerrorになりません。何か他に足りないのでしょうか?


String#matchesって文字列に対する正規表現が最初から最後まで完全に一致してないとfalseだった気がします。
簡単に考えて「最初から最後まで英数字、アンダーバー、アスタリスクのみの文字列と一致する」正規表現を書いて、結果を反転させればいいと思います。

_________________
JavaScript勉強中@仕事に全然関係ないけど

[ メッセージ編集済み 編集者: 想馬 編集日時 2006-06-16 14:18 ]
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-06-16 14:16
APIには、以下のようにありますね。
引用:

matches

public boolean matches(String regex)

この文字列が、指定された正規表現と一致するかどうかを判定します。


これは「文字列がパターンと一致するかどうか」を判定しているだけです。
ご希望のロジックを記述する場合は、PatternとMatcherを使いましょう。
CHAN10
会議室デビュー日: 2003/09/21
投稿数: 7
投稿日時: 2006-06-16 14:33
早い返答ありがとうございます。
いろいろ試してみて下記のように書くとうまくいきました。

String a = "*+26568769";
if(a.matches(".*[^\\w\\*].*")){
System.out.println("error");
}else{
System.out.println("ok");
}

いろいろ皆様からヒントを頂き助かりました。

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