Home > OS >  Unclosed character class while replacing string with regex
Unclosed character class while replacing string with regex

Time:12-15

I want to remove a string at the beginning of another.

Example:

Begin Removed Final
"\n123 : other" Yes other
"123 : other" No Error
"\n4 : smth" Yes smth
"123 : a" No Error

Thanks to Regexr, I made this regex:

/[\\][n](?:[0-9]*)[ ][:]/g

I tried to use it in Java. With string.matches() I don't have any error. But, with string.replaceFirst, I have this error :

java.util.regex.PatternSyntaxException: Unclosed character class near index 24
/[\][n](?:[0-9]*)[ ][:]/g
                        ^

What I tried else ?

  • Remove / at begin and /g at end.
  • Add (pattern) (such as visible in regex here)
  • Multiple others quick way, but I the error is always at the last char of my regex

My full code:

String str = "\n512 : something"; // I init my string
if(str.matches("/[\\][n](?:[0-9]*)[ ][:]/g"))
   str = str.replaceFirst("/[\\][n](?:[0-9]*)[ ][:]/g", "");

How can I fix it ? How can I solve my regex pattern ?

CodePudding user response:

You can use

.replaceFirst("\n[0-9] \\s :\\s*", "")

The regex matches

  • \n - a newline char (you have a newline in the string, not a backslash and n)
  • [0-9] - one or more digits
  • \s - one or more whitespaces
  • : - a colon
  • \s* - zero or more whitespaces

See the Java demo:

List<String> strs = Arrays.asList("\n123 : other", "123 : other", "\n4 : smth", "123 : a");
for (String str : strs)
    System.out.println("\""   str.replaceFirst("\n[0-9] \\s :\\s*", "")   "\"");

Output:

"other"
"123 : other"
"smth"
"123 : a"
  • Related