Reputation: 116169
I'm working on a solution to a previous question, as best as I can, using regular expressions. My pattern is
"\d{4}\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"
According to NetBeans, I have two illegal escape characters. I'm guessing it has to do with the \d and \w, but those are both valid in Java. Perhaps my syntax for a Java regular expression is off...
The entire line of code that is involved is:
userTimestampField = new FormattedTextField(
new RegexFormatter(
"\d{4}\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"
));
Upvotes: 55
Views: 84621
Reputation: 11
I had a similar because I was trying to escape characters such as -,*$ which are special characters in regular expressions but not in java.
Basically, I was developing a regular expression https://regex101.com/ and copy pasting it to java.
I finally realized that because java takes regex as string literals, the only characters that should be escaped are the special characters in java ie. \ and "
So in this case \\d should work. However, anyone having a similar problem like me in the future, only escaped double quotes and backslashes.
Upvotes: 1
Reputation: 11435
Have you tried this?
\\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}
Upvotes: 3
Reputation: 3374
all you need to do is to put
*\
ex: string ex = 'this is the character: *\\s';
before your invalid character and not 8 \ !!!!!
Upvotes: 0
Reputation: 13883
Assuming this regex is inside a Java String
literal, you need to escape the backslashes for your \d
and \w
tags:
"\\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"
This gets more, well, bonkers frankly, when you want to match backslashes:
public static void main(String[] args) {
Pattern p = Pattern.compile("\\\\\\\\"); //ERM, YEP: 8 OF THEM
String s = "\\\\";
Matcher m = p.matcher(s);
System.out.println(s);
System.out.println(m.matches());
}
\\ //JUST TO MATCH TWO SLASHES :(
true
Upvotes: 98
Reputation: 44063
Did you try "\\d"
and "\\w"
?
-edit- Lol I posted the right answer and get down voted and then I notice that stackoverflow escapes backslashes so my answer appeared wrong :)
Upvotes: 15
Reputation: 6170
What about the following: \\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}
Upvotes: 9
Reputation: 5028
I think you need to add the two escaped shortcuts into character classes. Try this: "[\d]{4}[\w]{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"
--Good Luck.
Upvotes: -1