【问题标题】:Java regular expression value.split("\\."), "the back slash dot" divides by character?Java 正则表达式 value.split("\\."), “反斜杠点”按字符分割?
【发布时间】:2010-12-01 14:30:56
【问题描述】:

据我了解,反斜杠点 (\.) 表示任何字符中的一个字符?所以因为反斜杠是转义,所以应该是反斜杠反斜杠点("\\."

这对字符串有什么作用?我刚刚在我正在处理的现有代码中看到了这一点。据我了解,它将字符串拆分为单个字符。为什么这样做而不是String.toCharArray()。所以这会将字符串拆分为一个字符串数组,该数组中的每个字符串只包含一个字符?

【问题讨论】:

    标签: java regex backslash


    【解决方案1】:

    正则表达式“。”将匹配您所说的任何字符。但是转义点“\”。将匹配文字点字符。因此 192.168.1.1 在“\”上拆分。将导致 {"192", "168", "1", "1"}。

    您的措辞并不完全清楚,但我认为这就是您要问的。

    【讨论】:

      【解决方案2】:

      我的猜测是您错过了反斜杠 ('\') 字符是 Java 字符串文字中的转义字符。因此,当您想在写成 Java 字符串的正则表达式中使用 '\' 转义时,您需要对其进行转义;例如

      Pattern.compile("\.");   // Java syntax error
      
      // A regex that matches a (any) character
      Pattern.compile(".");  
      
      // A regex that matches a literal '.' character
      Pattern.compile("\\.");  
      
      // A regex that matches a literal '\' followed by one character
      Pattern.compile("\\\\.");
      

      String.split(String separatorRegex) 方法将字符串拆分为由匹配正则表达式的子字符串分隔的子字符串。所以str.split("\\.") 会将str 拆分为由单个文字“。”分隔的子字符串。字符。

      【讨论】:

      • :: 没问题。!但是您能否对此进行更多详细说明,例如为什么要使用四个反斜杠?不应该是三个吗?
      • 文字反斜杠必须在正则表达式中转义一次。这给出了 2。这两个反斜杠都需要在字符串文字中转义。这使得 4. 三个反斜杠会给你一个 Java 编译错误。试试看,自己看看。
      • 为什么 Pattern.compile("\.");产生语法错误?
      • 因为"\." 是Java 字符串文字,而\. 不是Java 字符串文字中的合法转义序列。
      猜你喜欢
      • 1970-01-01
      • 2020-07-23
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      相关资源
      最近更新 更多