2017-03-29 16 views
0

正規表現否定ルックアヘッドを使用して、無効な文字が入力されていないかどうかを確認しようとしています。私がチェックしたい文字は0-9、空白、*、/、+、 - 、r、x以外のすべてです。否定ルックアヘッド正規表現を使用したJava入力チェック

String word = "(l4+3q)*(5+7-8)/(5)"; 
Pattern p = Pattern.compile("(?![\\d\\srx*+-/)]+)"); 
Matcher m = p.matcher(word); 

if(m.matches()) System.out.println("NO"); 

この現在のテストコードでは、使用するすべての文字列がfalseを返します。

私の仕様に合わせてこの正規表現を修正する方法について、誰かに私に指示してもらえますか?

+0

「yourString」はどのようになりますか(「[^ - \\ d */+ xr] +」) ' –

答えて

0

この順番でこの+-/を使用したくない場合。
この方法で使用される-は、範囲演算子であり、リテラルではありません。
リテラルにするには、末尾または先頭に追加するか、エスケープして
とします。どこでもかまいません。

基本的には、そのクラスのではなくと一致させる必要があります。
Pattern p = Pattern.compile("[^\\d\\srx*+\\-/)]");

if(m.matches())と一致すると、不正な文字が見つかりました。
または
if(!m.matches())と一致しない場合は、不正な文字が見つかりませんでした。

+0

これは私にとってはうまくいかないようです。あなたの正規表現と文字列 "(4 + 3 + qfadfcxbvs)"に対してif(m.matches())というテストを使うとtrueを返しません。何が間違っているかも考えていますか? – prior

+0

@prior - 私はJavaを使用しません。_match()_が行全体と一致する必要があるかどうかはわかりません。そのような場合は、 ''。* [^ \\ d \\ srx * + \\ - /)]。* ''を使用してください。正規表現 '[^ \ d \ srx * + \ - /]]'に関しては、あなたの文字列を指定すると、これらの強調表示された文字と一致します。 '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '') – sln

+0

私は何が間違っているかを考え出しました。私はfind()メソッドを使用することに戻り、それはうまくいった。ご協力いただきありがとうございます! – prior

関連する問題