2016-07-27 6 views
-2

私は一致するようにしようとしているユーザー入力がありますが、'^-などの特殊文字は除外します。特定の文字セットを一致または「無視」することが可能かどうかを知りたいと思います。したがって、リストに"^-"が含まれていて、用語がPRMだった場合、P^^R---^Mは一致しますがPROMOが「許可」文字のセットではないため一致しません。用語内の任意の数の特定の文字を照合することは可能ですか?

これは正規表現で可能ですか?

+0

は疑問がそれを必要とする場合言い換えて幸せdownvotesの説明を、大好きです。 – kgrad

+0

それは可能ですが、clunkyです。あなたは 'P [^ - ] * R [^ - ] * Mのような何かをしなければならないでしょう。はるかに良い解決策は正規表現を適用する前に文字列からそれらの文字を削除することです。 –

+0

私はおそらくそれを行うことができますが、私は文字列を保持する必要がある、正規表現は私の人生を楽にするだろうが、適切でない場合私は上に移動することができます。 – kgrad

答えて

3

Java 8では、String.joinを使用して、1つまたは複数の特殊文字を表す文字グループ([^-]*など)を表す文字グループで、正規表現の特殊文字をエスケープして、個々の文字を結合することができます。

String term = "PRM"; 
String special = "^-"; 

String delimiter = "[" + Pattern.quote(special) + "]*"; 
String regex = String.join(delimiter, term.split("")); 

System.out.println(Pattern.matches(regex, "PROM"));  // --> false 
System.out.println(Pattern.matches(regex, "P^^R---^M")); // --> true 

代わりに、""でもreplaceAll特殊文字を可能性と平等のためのチェック:

System.out.println(term.equals("PROM".replaceAll(delimiter, "")));  // --> false 
System.out.println(term.equals("P^^R---^M".replaceAll(delimiter, ""))); // --> true 
+0

を適用すると、それをグローバルにリストすることはできません。助けてくれてありがとう。 – kgrad

+0

私は、各文字の間に「スペシャル」のリストを挿入するのではなく、グローバルに一度にそれを提供することを意味しました。私はそれが実際には問題ではないと思う。 – kgrad

+0

@kgrad私の2番目のアプローチを見てください。実際には、これはもっと簡単かもしれません。 –

関連する問題