正規表現を使用して入力チェックをしようと考えていますが特殊記号文字がうまくいきません。
[0-9a-zA-Z]で英数字はチェックする事ができたんで下記の特殊文字を指定するとエラーになってしまい困っています。
「!"#$%&'()=~|`{+*}<>?_-^\@[;:],./」
ロジックは以下のように記述しています。
Pattern p = Pattern.compile("[0-9a-zA-Z!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./]");
Matcher m = p.matcher("文字列");
if(m.matches() == true){
System.out.println("1");
}
else{
System.out.println("2");
}
※「\」と「"」はエスケープしています。
下記のエラーメッセージが表示されてなんとなくですが正規表現でエラーになっているのはわかるんですが・・・
Illegal character range near index 32
[0-9a-zA-Z!"#$%&'()=~|`{+*}<>?_-^\@[;:],./]
^
申し訳ありませんがアドバイスいただけませんでしょうか?
宜しくお願いします。
No.5ベストアンサー
- 回答日時:
問題のキャラクターをエスケープしたら、
>「エスケープ・シーケンスが無効です」
とメッセージが出たということですね。
これは、Perl などの言語と違って、Javaでは正規表現を一旦文字列として
記述して、それをライブラリの入力として与えなければならないことに
原因があります。
つまり、正規表現で使うエスケープ用の記号も '\' で、同時に文字列で
エスケープに使う記号も'\' なので、正規表現として '\' を表すには
文字列では '\\' と記述しないといけないということです。
具体例を挙げると、
_\-^
という正規表現を渡すためには、
"_\\-^"
という文字列を記述しないといけません。そうしないと、Javaの文字列
のエスケープとして解釈されてしまうので
>「エスケープ・シーケンスが無効です」
となってしまうわけです。
だから、「正規表現で\」を記述するには
"\\\\" → 「文字列のエスケープを処理」→ \\ → 「正規表現のエスケープを処理」
→ \
と、"\\\\" とする必要があったりします。
この回答への補足
回答ありがとうございます。
なるほど、ちょっと試してみます。
進展がありましたら投稿しますのでお待ち下さい。
宜しくお願いします。
No.4
- 回答日時:
> 「!"#$%&'()=~|`{+*}<>?_-^\@[;:],./」
いきなりこれだけの記号を試すのではなく、1つずつ試していってはいかがですか?
> それ以外にエスケープしようとすると「エスケープ・シーケンスが無効です」とエラーになります。
と仰るのが具体的にどの文字なのか分かりませんが、1つずつ試せば分かるはずなので、その文字をエスケープする方法、という形に絞って検索するなり、質問するなりできると思います。
この回答への補足
回答ありがとうございます。
1つ1つ記述して試してみます。
進展がありましたら投稿しますのでお待ち下さい。
宜しくお願いします。
No.3
- 回答日時:
/*
久々にsakusaker7さん見かけたなーと。
このコードどう思う?
*/
class x{
public static void main(String[] args){
/*java.util.regex.Pattern p = java.util.regex.Pattern.compile("^[\\p{ASCII}&&[\\P{C}]]$"); */
java.util.regex.Pattern p = java.util.regex.Pattern.compile("^[\\p{ASCII}&&[^\\p{C}]]$");
for(int i = 0;i < 128 ; i++){
if(p.matcher(java.lang.Character.toString(java.lang.Character.toChars(i)[0])).matches()){
System.out.println(Integer.toString(i) + ":" + "YES");
}else{
System.out.println(Integer.toString(i) + ":" + "No");
}
}
}
}
この回答への補足
回答ありがとうございます。
ロジックを記述していただきありがとうございます。
しかし、私には難しいです。
すみませんが正規表現ではできないのでしょうか。
再度、宜しくお願いします。
No.2
- 回答日時:
ブラケットの中の記号に
_-^
と並んでいる部分がありますよね。
ここが、_、-、^という三つのキャラクターではなく
_から^までの範囲の指定と解釈され、かつ、_は^よりも
「順番があとのキャラクター」なので
Illegal character range
となってます。
-はブラケットの中で特別の意味を持っていますから、それを打ち消すための
エスケープが必要です。
^も特別な意味がありますが、先頭になければそのままでも大丈夫でしょう。
あ、あと[と]も要エスケープですね。
この回答への補足
回答ありがとうございます。
Eclipseで作成しています。
「\」と「"」はエスケープしないとエラーになったのでエスケープしました。
またそれ以外にエスケープしようとすると「エスケープ・シーケンスが無効です」とエラーになります。
どのようにしたらいいのでしょうか。
アドバイス宜しくお願いします。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
エラー:org.springframeworkが...
-
Eclipseの環境について
-
eclipseでのsvn認証エラー回避方法
-
DataSetのFilter
-
構文エラーのやり直しについて
-
eclipseをバージョンアップした...
-
Javaのエラーについてです
-
processingでのアプリビルドエ...
-
JSP内でString型からint型に変...
-
for,while文とreturn
-
「型 ArrayList は総称ではあり...
-
JSP NullPointerException
-
S2daoのSqlファイルでのDBア...
-
eclipseのエラーについて質問で...
-
Oracle8i に接続しようと思うん...
-
「httpステータス404」とい...
-
JBossについて
-
シンボルが見つかりませんとい...
-
enum列挙子に使える文字列と使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
エラー:org.springframeworkが...
-
シンボルが見つかりませんとい...
-
eclipseでのsvn認証エラー回避方法
-
eclipseをバージョンアップした...
-
Javaのエラーについてです
-
タグが閉じてないというエラー...
-
Eclipseで次のエラー箇所にジャ...
-
構文エラーのやり直しについて
-
tomcat起動時エラー
-
コンパイル時にエラーが出てし...
-
JSP内でString型からint型に変...
-
eclipseのエラーについて質問で...
-
Eclipseの環境について
-
DataSetのFilter
-
JSPで意味不明のコンパイルエラー
-
JBossについて
-
Eclipse デバッグ エラー処理
-
Java エスケープ文字
-
jspのファイルでエラーが出る
おすすめ情報