2009-09-26 182 views
34

据我所知,反斜杠点(\.)是指任何字符的一个字符?因此,因为反斜杠是一种转义,所以它应该是反斜杠点("\\."Java正则表达式value.split(“\。”),“反斜杠点”按字符划分?

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

回答

68

我的猜测是你缺少反斜线('\')字符是Java字符串中的转义字符。所以当你想在正则表达式中使用'\'转义写成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("\\\\."); 

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

+0

::它工作正常。但是你能不能详细解释一下这个问题,比如说为什么四个反斜杠?不应该有三个? – Oliver 2014-12-09 08:59:03

+2

文字反斜杠必须在正则表达式中转义一次。这给出了2.这两个反斜杠都需要在字符串文字中转义。这使得4.三个反斜杠会给你一个Java编译错误。尝试一下,看看自己。 – 2014-12-09 10:33:27

+0

为什么Pattern.compile(“\。”);产生语法错误? – adub3 2014-12-24 10:25:47

7

正则表达式“。”在你陈述的时候会匹配任何角色。但是一个转义点“\”。将匹配文字点字符。因此192.168.1.1分割为“\”。会导致{“192”,“168”,“1”,“1”}。

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

相关问题