代码之家  ›  专栏  ›  技术社区  ›  Bad Request

为什么\\在这个正则表达式中不被解释为黑斜杠?

  •  2
  • Bad Request  · 技术社区  · 16 年前

    \\. 结果是一个点而不是反斜杠(the\\part)和一个点(the)。零件)。编译器不是从左到右读取的吗?

    import java.util.regex.*;
    public class SplitTest {
       public static void main(String[] args)  {
           String input= "www.cs.cornell.edu";                          
    
          Pattern p = Pattern.compile("\\.");
          String pieces[] = p.split(input);
          for (int i=0; i<pieces.length; i++){
                System.out.println(pieces[i]);    
                }
    
    
    
       }
    }
    
    3 回复  |  直到 16 年前
        1
  •  6
  •   Matthew Flaschen    16 年前

    它在解析字符串文本时被解释一次,在正则表达式编译器中被解释一次。

    "\\." -&燃气轮机; "\."
    "\." . -正则表达式编译器

        2
  •  4
  •   Ming-Tang    16 年前

    必须对字符串文本进行双转义。 "\\\\." 因为Java解释字符串的字面意义 "\\." \. ,这不是你所期望的。 试试这个: System.out.println("\\.") ,您看到的是regexp中的内容。

    编辑:您的输入字符串是 "www.cs.cornell.edu" . 你知道你在做什么吗?也许你是想被点分开( \. ),它的Java文本是 "\\." 当你打字的时候。

    也许你想先匹配一个反斜杠,然后再匹配一个点,这意味着它的正则表达式是 \\\. ,它的Java文本是 "\\\\\\."

        3
  •  0
  •   Paul Gregoire    16 年前

    public class SplitTest {
        public static void main(String[] args) {
            String input = "www.cs.cornell.edu";
            String[] pieces = input.split("\\.");
            for (String piece : pieces) {
                System.out.println(piece);
            }
        }
    }
    
    在这种情况下,“双反斜杠周期”的工作原理与预期一样,但是stackoverflow上的格式化需要“四反斜杠周期”,这有点奇怪。