Java中含{}、/、-的字符串分割报错,如何提取指定数字?
解决Java字符串分割时的PatternSyntaxException异常
问题根源
你遇到的PatternSyntaxException: Illegal repetition异常,本质原因是String.split()方法的参数是正则表达式,而你用来分割的字符串-{name-of-perpetrators里包含了{——这个字符在正则语法中是特殊元字符,用来指定重复次数(比如a{3}表示匹配3个a),直接使用会被解析成非法的正则语法,所以触发了异常。
解决方案1:转义正则特殊字符
你可以手动转义{和}(Java字符串里需要用\\来转义单个\),或者更省心的是用Pattern.quote()方法自动转义所有正则特殊字符,这样分割字符串会被当作普通文本处理。
修正后的代码:
import java.util.regex.Pattern; public class TextSplit { public static void main(String[] args) { String current_url = "https://{domain name}/{type of data}/4583236-{name-of-perpetrators}"; String[] urlParts = current_url.split("type of data}/"); String mySuburl = urlParts[1]; // 使用Pattern.quote()包裹分割字符串,自动转义所有正则特殊字符 String[] suburl = mySuburl.split(Pattern.quote("-{name-of-perpetrators")); String mytext = suburl[0]; System.out.println(mytext); // 输出4583236 } }
解决方案2:直接匹配提取数字(更可靠)
如果你的核心需求只是提取URL中的那段数字,用正则直接匹配连续数字段会更灵活,不用依赖固定的分割字符串,哪怕URL结构有小调整也能正常提取:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class TextSplit { public static void main(String[] args) { String current_url = "https://{domain name}/{type of data}/4583236-{name-of-perpetrators}"; // 匹配连续数字的正则表达式 Pattern pattern = Pattern.compile("(\\d+)"); Matcher matcher = pattern.matcher(current_url); if (matcher.find()) { String mytext = matcher.group(1); System.out.println(mytext); // 输出4583236 } } }
额外提示
以后使用String.split()时,只要分割字符串包含正则特殊字符(比如{、}、*、+、.等),都需要要么手动转义,要么用Pattern.quote()来避免语法异常。
内容的提问来源于stack exchange,提问作者undetected Selenium
相关产品推荐
相关产品推荐

