Java正则表达式value.split("\\."),"反斜杠点"按字符划分?

Nap*_*Nap 35 java regex backslash

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

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

Ste*_*n C 70

我的猜测是你缺少反斜杠('\')字符是Java String文字中的转义字符.所以当你想在一个用Java String编写的正则表达式中使用'\'转义时,你需要转义它; 例如

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("\\\\.");
Run Code Online (Sandbox Code Playgroud)

String.split(String separatorRegex)方法将String拆分为由与正则表达式匹配的子字符串分隔的子字符串.因此str.split("\\.")将拆分str为由单个文字'.'分隔的子串.字符.

  • 在正则表达式中必须转义一次字面反斜杠.这给出了2.这两个反斜杠都需要在String文字中进行转义.这使得4.三个反斜杠会给你一个Java编译错误.试一试,亲眼看看吧. (2认同)

nal*_*all 7

正则表达式"." 会像你所说的那样匹配任何角色.但是转义点"\".将匹配文字点字符.因此192.168.1.1拆分为"\".会导致{"192","168","1","1"}.

你的措辞并不完全清楚,但我认为这就是你所要求的.