- - PR -
正規表現について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-06-16 02:08
<質問>
aの文字列内にアスタリスクとアンダーバーと英数字以外のものが含まれていればerrorにしたいのですがパターンをどのようにかけばいいのでしょうか? String a = "2659876"; if(!a.matches("\\**_*\\w*")){ System.out.println("error"); }else{ System.out.println("ok"); } _________________ | ||||
|
投稿日時: 2006-06-16 02:20
[] が囲んだ文字に対して、どんな役割を果たすのか、
^ が右隣の文字に対して、どんな意味を持つのか とりあえず上記の2点を勉強してみませう。 | ||||
|
投稿日時: 2006-06-16 04:24
返答ありがとうございます。
おそらく答えを聞いたら簡単な事だと思いますが、いまだ解決できません。 []とはカッコ内の任意の一文字が一致するものを探し ^とは右隣の文字以外のものを探すと理解しております。 単純に考えると"[^\\w^\\*^_]"となるような気もするのですがうまくいきません。 | ||||
|
投稿日時: 2006-06-16 09:26
> []とはカッコ内の任意の一文字が一致するものを探し
1文字の比較なので探すという表現はおかしい気がしますが、その通りです。 > ^とは右隣の文字以外のものを探すと理解しております。 []の先頭に^を付けると、[]内の文字が全て否定パターンとなります。 つまり、"[^\\w^\\*^_]"ではなく、"[^\\w\\*_]"になりますね。 それから\\wは_も含むので、[]内に_を入れる必要はありません。 "[^\\w\\*]"となりますが、これでは一文字なので、[]の後ろに*か+を付けてやりましょう。 | ||||
|
投稿日時: 2006-06-16 13:46
返答ありがとうございます。
String a = "265&%9876"; if(a.matches("[^\\w\\*]*")){ System.out.println("error"); }else{ System.out.println("ok"); } 上記のようにaの文字列の中に英数字以外のものを入れてみたのですがerrorになりません。何か他に足りないのでしょうか? | ||||
|
投稿日時: 2006-06-16 14:14
String#matchesって文字列に対する正規表現が最初から最後まで完全に一致してないとfalseだった気がします。 簡単に考えて「最初から最後まで英数字、アンダーバー、アスタリスクのみの文字列と一致する」正規表現を書いて、結果を反転させればいいと思います。 _________________ JavaScript勉強中@仕事に全然関係ないけど [ メッセージ編集済み 編集者: 想馬 編集日時 2006-06-16 14:18 ] | ||||
|
投稿日時: 2006-06-16 14:16
APIには、以下のようにありますね。
これは「文字列がパターンと一致するかどうか」を判定しているだけです。 ご希望のロジックを記述する場合は、PatternとMatcherを使いましょう。 | ||||
|
投稿日時: 2006-06-16 14:33
早い返答ありがとうございます。
いろいろ試してみて下記のように書くとうまくいきました。 String a = "*+26568769"; if(a.matches(".*[^\\w\\*].*")){ System.out.println("error"); }else{ System.out.println("ok"); } いろいろ皆様からヒントを頂き助かりました。 |