Fix: java.util.regex.PatternSyntaxException


Code:

package org.code2care.example;

public class PatternSyntaxExceptionExample {

    public static void main(String[] args) {

        String string = "1(2(3(4(5";
        String[] strArr = string.split("(");
        
    }
}

Exception:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 1
(
	at java.base/java.util.regex.Pattern.error(Pattern.java:2028)
	at java.base/java.util.regex.Pattern.accept(Pattern.java:1878)
	at java.base/java.util.regex.Pattern.group0(Pattern.java:3053)
	at java.base/java.util.regex.Pattern.sequence(Pattern.java:2124)
	at java.base/java.util.regex.Pattern.expr(Pattern.java:2069)
	at java.base/java.util.regex.Pattern.compile(Pattern.java:1783)
	at java.base/java.util.regex.Pattern.<init>(Pattern.java:1430)
	at java.base/java.util.regex.Pattern.compile(Pattern.java:1069)
	at java.base/java.lang.String.split(String.java:3151)
	at java. base/java.lang.String.split(String.java:3197)
	at org.code2care.example.JavaSplitOnDotStringExample2.main(JavaSplitOnDotStringExample2.java:7)

Reason for the exception:

The java.lang.String split() function throws a PatternSyntaxException if the if the regular expression's syntax is invalid.

If you take a closer look at the regular expression used here open braces (, this has a special meaning when working with Regular Expressions. Such characters need to be escaped with a double forward slash \\

Fix:

Change the regex string from,

string.split("(");

to,

string.split("\\(");

Below is the list of all the characters that when you want to use "literally" in the regex string needs to be escaped.

CharacterDescription
\Escape character
.Any character except a newline
+One or more occurrences
*Zero or more occurrences
?Zero or one occurrence
``
(Start of a capturing group
)End of a capturing group
[Start of a character class
]End of a character class
{Start of a quantifier
}End of a quantifier
-Range of characters in a class
^Start of a string/line
$End of a string/line

Facing issues? Have Questions? Post them here! I am happy to answer!

Author Info:

Rakesh (He/Him) has over 14+ years of experience in Web and Application development. He is the author of insightful How-To articles for Code2care.

Follow him on: X

You can also reach out to him via e-mail: rakesh@code2care.org

Copyright © Code2care 2024 | Privacy Policy | About Us | Contact Us | Sitemap