• ベストアンサー

半角記号、全角記号を含む正規表現を作れなくて困っています。

システムの入力チェックのために !"#$%&'()=~|`{+*}<>?_-^\@[;:],./ !”#$%&’()=~|‘{+*}<>?_-^¥@「;:」、。・ などの半角記号、全角記号を1個以上含むとtrueを返す 正規表現を作りたいのですが、うまくできなくて困っています。 以下の[ ]に入れる値で、何か良いものはありませんか? Boolean b = Pattern.compile("[ ]+").matcher(input).matches();

  • Java
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>全角はエスケープシーケンスがいらないのでしょうか? いらないです。エスケープする必要がないので。 >エスケープシーケンスをあまり使いたくないので、範囲指定する方法を知りたいのです。 うーん。全角の記号はエスケープする必要がないけど、「範囲指定」だとUnicodeで範囲指定できるかも。 ただ、全角の記号がUnicodeで連続になっていればいいけど、(おそらく)なっていないだろうから。 正規表現の読みやすさ?を考えてのことだったら… 苦しいかもしれないけど  String hankaku = "\\p{Punct}"; //半角記号  String zenkaku = "!”#$%&’()=~|‘{+*}<>?_-^¥@「;:」、。・"; //全角記号  boolean b = Pattern.compile("["+hankaku+zenkaku+"]+").matcher(input).matches(); ってな感じでどうでしょう…。

pochi1234
質問者

お礼

全角記号は全部書かないとだめなんですね。 とても参考になりました。ありがとう。

その他の回答 (2)

回答No.2

「\(半角円マーク)」は  正規表現では「\\(半角円マーク2つ)」としなければなりません。 Javaでは文字列に「\(半角円マーク)」を記述するときは  「\\(半角円マーク2つ)」としなければなりません。 ということは、Javaの文字列に正規表現で「\(半角円マーク)」を使う場合は  「\\\\(半角円マーク4つ)」ということになります。 半角記号が  !"#$%&'()=~|`{+*}<>?_-^\@[;:],./ これらだけで他にはないのであれば、この部分は  \p{Punct} に置き換え可能です。 例)  String hoge = "\\";  System.out.println(hoge.matches("[\\p{Punct}]+")); >Boolean b = Pattern.compile("[ ]+").matcher(input).matches(); 「Boolean」じゃなくて「boolean」ですよね?

pochi1234
質問者

補足

Punctの使い方を間違っていたようで、うまくできましたが、 全角記号が難しいです。 全角はエスケープシーケンスがいらないのでしょうか? Punctのように何か省略して行う方法があればいいのですが。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「うまくできない」とはどのような状態を指すのでしょうか? 表記に工夫の必要な記号がありますが, そこはちゃんとよろしくしていますか?

pochi1234
質問者

補足

エスケープシーケンスをあまり使いたくないので、範囲指定する方法を知りたいのです。

関連するQ&A

  • java正規表現 matchesがおかしい(バージョンの違い?)

    java正規表現 matchesがおかしい(バージョンの違い?) 正規表現を学びだしたところなのですが、patternのmatchesが上手くいきません。 このページ http://www.site-cooler.com/java/j2se/regex.htm に書かれている、 Pattern pattern = Pattern.compile("^Hello"); Matcher matcher = pattern.matcher("Hello World. This is regex sample."); boolean blnMatch= matcher.matches(); System.out.println(blnMatch); を実行してもfalseが返ってきてしまいます。 これはバージョンの違いからくるものなのでしょうか? ちなみに私はjre1.6でeclipse3.5を使用しています。 回答をよろしくお願いします。

    • ベストアンサー
    • Java
  • 日本語の正規化表現

    urizakaです J2SDK1.4から正規表現が標準についたと知り、さっそくカタカナエラーチェックのためのBeanを作ってみたのですが、どんな文字列(カタカナ、英語、ひらがな…etc)と比較させても「False」しか戻ってこないという状態で、うまく行きません。 /** *カタカナエラーチェック:カタカナは使われているかどうか? *@param s 調べる **/ public boolean checkKkana(String s){ Pattern pattern = Pattern.compile("[^アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨワヲン]"); Matcher matcher = pattern.matcher(s); boolean check = matcher.matches(); return check; } } もしかすると、日本語を処理するのには特別な方法が必要なのでしょうか? すみませんが、よろしくお願いします

    • ベストアンサー
    • Java
  • Javaの全角スペースの正規表現

    今、Javaのプログラムをしてるんですが、正規表現で全角スペースをどう表現したらいいのでしょうか? 下記のプログラムを実行して、スペースを埋めて「あいう」と出したいです。 Pattern.compile("正規表現").matcher(" あ い う ").replaceAll(""); 正規表現の\sとか、trim()メソッドを使用するなどだと、半角スペースしか削除することができなかったです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 正規表現で入力チェックするには。

    正規表現を使用して入力チェックをしようと考えていますが特殊記号文字がうまくいきません。 [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!"#$%&'()=~|`{+*}<>?_-^\@[;:],./]                       ^ 申し訳ありませんがアドバイスいただけませんでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • 正規表現の検索について

    正規表現のエスケープしなければいけない文字が文字列に含まれているかどうかをチェックしたいのですがうまくいきません。 今は、下記のようにしてnoと表示されます。 よろしくお願いします。 String str ="(1)test"; Pattern p; Matcher m; p = Pattern.compile("\\(1\\)"); m = p.matcher(str); if(m.matches()) { System.out.println("ok"); }else{ System.out.println("no"); }

    • ベストアンサー
    • Java
  • 正規表現

    String u = "http://~~~~"; Pattern ptn = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+",Pattern.CASE_INSENSITIVE); Matcher objMch = ptn.matcher(u); if (!objMch.matches()) return "error"; とした場合、 普通のURLなら大丈夫ですが、http://......?a=1&... などのようにパラメータが付くと error がかえされます。 ということで、? や & などでパラメータが付いても error が帰らないようにする正規表現を教えてください。お願いします。

    • ベストアンサー
    • Java
  • Java正規表現で全角記号

    Javaの正規表現 で「全角記号のみ」というのがどうしてもわかりません。 今Javaでプログラムを作っていてString name が nullの時と、全角記号半角記号スペースのみ、空文字の時に returnをnullにするif文を考えています。 しかし、半角記号と全角記号の正規表現がサッパリわかりません 。とくに全角記号が全くわかりません。 種類が多すぎてきりがないのです。 どうやって表現したらいいのでしょうか? [、-○]などがネットにはありましたが、エラーになります。 どうか教えてください! 追加の詳細が必要なときはコメントいただけましたら返信いたします。 よろしくお願いします。

  • FrexibleRenamerで【全角→半角】の正規表現は?

    FrexibleRenamerで【全角→半角】の正規表現は? FrexibeRenamerにあらかじめ用意されている【全角→半角】で変換したところ、 !#$%&’() _などの文字が変換されませんでした。 【全角→半角】は英数に限られているのでしょうか。 正規表現を使おうとしたのですが【全角→半角】の指定方法がわかりません。 これらの記号を【全角→半角】する方法を教えて頂けないでしょうか。 階層丸ごと全フォルダ名と全ファイル名を変更したいのでFrexibleRenamerを使いました

  • 時間の正規表現

    正規表現で、17:00:00という文字の17:00(時:分)の部分だけを見て、時間として認識させたいのですが、どのように記述すればいいのでしょうか? 以下のプログラムを作成したのですが、なぜかfalseが返されてしまって困っています。 教えてください。宜しくお願いいたします。 String str_time = "17:00:00"; String str = "([0-9]|([0-1][0-9]|[2][0-3]))[:][0-5][0-9]"; Pattern pat = Pattern.compile( str ) ; Matcher mat = pat.matcher( str_time ) ; if( mat.matches() ){ // 処理 }

    • ベストアンサー
    • Java
  • 正規表現で特定の半角数字を全角にするのは?

    正規表現で特定の半角数字を全角にするのは? マイフェスで文書編集をしています。 特定の記号[◎]の後ろにある半角数字だけを全角数字にしたいのですが、 記述方法がよくわかりません。 よろしくお願いいたします。