Java中Matcher类无法匹配calm://链接正则模式问题求助
问题原因及修复方案
你代码里的正则写法存在3个核心错误:
- 混用了JavaScript风格的正则语法:Java的
Pattern类不支持/正则/修饰符的写法,不需要加首尾的/,尾部的gi也不能直接写在正则串里。忽略大小写需要通过Pattern.CASE_INSENSITIVE参数指定,全局匹配不需要额外参数,多次调用matcher.find()即可实现。 - 字符串转义不符合Java规则:Java字符串中反斜杠本身需要转义,正则语法里的
\b单词边界在Java字符串中要写为\\b,同时/在Java正则中不需要加反斜杠转义。 - 正则规则冗余且未定义捕获组:
calm?中的?会让末尾的m变成可选匹配,不符合你的匹配需求;原正则没有定义任何捕获组,直接调用group(1)会抛出索引越界异常,提取整个匹配结果调用group(0)即可。
修正后可运行代码
String test = "Calm_fit calm://listpage?pageid=fitnesstab SomeText"; Pattern pattern = Pattern.compile("\\bcalm://\\S+", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(test); System.out.println("Here 1"); if (matcher.find()) { System.out.println("Here 2 Matched: " + matcher.group(0)); }
运行后即可正常提取到目标链接calm://listpage?pageid=fitnesstab。
内容的提问来源于stack exchange,提问作者Ayusch Jain
相关产品推荐
相关产品推荐

