Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java regular expression value.split("\\."), "the back slash dot" divides by character?

From what I understand, the backslash dot (\.) means one character of any character? So because backslash is an escape, it should be backslash backslash dot ("\\.")

What does this do to a string? I just saw this in an existing code I am working on. From what I understand, it will split the string into individual characters. Why do this instead of String.toCharArray(). So this splits the string to an array of string which contains only one char for each string in the array?

like image 986
Nap Avatar asked Sep 26 '09 02:09

Nap


People also ask

What does \\ mean in Java regex?

The backslash \ is an escape character in Java Strings. That means backslash has a predefined meaning in Java. You have to use double backslash \\ to define a single backslash. If you want to define \w , then you must be using \\w in your regex.

How do you escape a backward slash in regular expression?

Because backslash \ has special meaning in strings and regexes, if we would like to tell Perl that we really mean a backs-slash, we will have to "escape" it, by using the "escape character" which happens to be back-slash itself. So we need to write two back-slashes: \\.

How do you include a slash in a regular expression in Java?

You can use '\\' to refer to a single backslash in a regular expression. However, backslash is also an escape character in Java literal strings. To make a regular expression from a string literal, you have to escape each of its backslashes.


2 Answers

My guess is that you are missing that backslash ('\') characters are escape characters in Java String literals. So when you want to use a '\' escape in a regex written as a Java String you need to escape it; e.g.

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("\\\\."); 

The String.split(String separatorRegex) method splits a String into substrings separated by substrings matching the regex. So str.split("\\.") will split str into substrings separated by a single literal '.' character.

like image 174
Stephen C Avatar answered Oct 14 '22 22:10

Stephen C


The regex "." would match any character as you state. However an escaped dot "\." would match literal dot characters. Thus 192.168.1.1 split on "\." would result in {"192", "168", "1", "1"}.

Your wording isn't completely clear, but I think this is what you're asking.

like image 22
nall Avatar answered Oct 14 '22 21:10

nall