文字列のメソッドはそうで[
、(
、*
、$
、+
、\
、.
など、いくつかの特殊文字をエスケープする必要があります。たとえば、split()
メソッドを考えてみましょう。次の式は、実行時例外java.util.regex.PatternSyntaxException
を発生させます。正規表現を使用するJavaの文字列メソッドは、他の特殊文字と同様に点でエラーを発行しません。どうして?正規表現を使用してJavaで
String str="Java[language";
String arr[]=str.split("[");
String str="Java(language";
String arr[]=str.split("(");
String str="Java*language";
String arr[]=str.split("*");
String str="Java$language";
String arr[]=str.split("$");
String str="Java+language";
String arr[]=str.split("+");
上記のすべての式は、java.util.regex.PatternSyntaxException
の例外を引き起こします。これは、String arr[]=str.split("\\[");
のようなものをエスケープする必要があるためです。それはかなり明白です。ドット"."
の場合
は、しかし、コンパイラは黙ってそれは表現がString arr[]=str.split(".");
も全くの正規表現のそのまた一部けれどもエラー、警告なしまたは全く例外が発生しないことを意味してエスケープする必要があります解析します。どうして? (str
が保持する文字列は、この場合は明らかに分割されません)
コンパイラは解析しません。パターンは実行時にコンパイルされます。 –