replaceAll给出意想不到的结果

时间:2013-12-01 16:27:22

标签: java regex

import java.io.*;

public class test
{
   public static void main(String args[])
   {
      String Str = new String("This is some text");
      System.out.println(Str.replaceAll("[^A-Za-z0-9]", "."));
   }
}

它产生This.is.some.text。如果我删除了^,那就生成我想要的内容:.... .. .... ....。符号^在此处发生了什么变化? ^意味着它是开始,但我仍然不明白为什么它产生的结果不同于没有它的代码。我错过了什么?

3 个答案:

答案 0 :(得分:5)

^在正则表达式中有两种不同的含义。如果它位于正则表达式的开头(例如^[a-z]+$),则表示行的开头。但如果它位于字符类规范的开头(例如[^a-z]+),则意味着否定。

答案 1 :(得分:2)

[^A-Za-z0-9]表示除'A' to 'Z''a' to 'z''0' to '9'以外的任何字符

enter image description here

[A-Za-z0-9]表示'A' to 'Z''a' to 'z''0' to '9'的任何字符。 enter image description here

答案 2 :(得分:1)

^用于否定 character class的内容。

  • [abc]表示“其中一个字符abc”。
  • [^abc]表示“除 abc以外的任何字符。”