The java exception java.util.regex.PatternSyntaxException: Dangling meta character ‘*’ near index 0 happens when the string is matched by the regular expression meta character such as “*”, “+”, “?”. In a search string, the regular expression meta characters (“*”, “+”, “?”) must escape.
The regular expression contains meta characters such as “*”, “+”, “?”. The exception “java.util.regex.PatternSyntaxException: Dangling meta character” will be thrown when using these regular expression meta characters in java methods
Exception
You’ll see the exception java.util.regex.PatternSyntaxException: Dangling meta character ‘*’ near index 0 stack trace as below
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*
^
at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.sequence(Pattern.java:2123)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.compile(Pattern.java:1696)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at java.lang.String.split(String.java:2380)
at java.lang.String.split(String.java:2422)
at com.yawintutor.StringSplit.main(StringSplit.java:9)
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+
^
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0
?
^
Root Cause
The characters “*”, “+”, “?” are called meta characters in regular expression. These meta characters are used to match more than one occurrence of the matching pattern in a string. These characters are used as literals using the escape characters. The following are the meaning of these meta characters
Meta Character | Description | Escape character |
* | zero or more occurrence of the characters | \\* |
+ | one or more occurrence of the characters | \\+ |
? | zero or only one occurrence of the characters | \\? |
^ | Start of the character sequence | \\^ |
$ | End of the character sequence | \\$ |
How to reproduce this issue
If The meta characters “*”, “+”, “?” are used within the regular expression for the purpose of matching the literal characters, the exception java.util.regex.PatternSyntaxException will be thrown
package com.yawintutor;
public class StringSplit {
public static void main(String[] args) {
String str = "Yawin*tutor";
String str2 = "*";
String[] strArray;
strArray = str.split(str2);
System.out.println("Given String : " + str);
for(int i=0;i<strArray.length;i++) {
System.out.println("strArray["+i+"] = " + strArray[i]);
}
}
}
Solution
The meta characters “*”, “+”, “?” are used within the regular expression with escape character will resolve this issue. the escape characters are “\\*”, “\\+” and “\\?”. The example below shows how to use the escape character within regular expression string in java.
package com.yawintutor;
public class StringSplit {
public static void main(String[] args) {
String str = "Yawin*tutor";
String str2 = "\\*";
String[] strArray;
strArray = str.split(str2);
System.out.println("Given String : " + str);
for(int i=0;i<strArray.length;i++) {
System.out.println("strArray["+i+"] = " + strArray[i]);
}
}
}
Output
Given String : Yawin*tutor
strArray[0] = Yawin
strArray[1] = tutor