为什么以下Pattern不适用于所有OS版本?

时间:2018-01-17 10:15:38

标签: android regex regular-language

https://regex101.com/r/Q6lTN8/1

上测试了以下正则表达式
Pattern pattern = Pattern.compile("(?<name>\\b\\w+\\b)\\s*=\\s*(?<value>\"[^\"]*\"|'[^']*'+)");

使用此输入文本

id='1019' name='Beer' color='#e7c705'

适用于Android版本&gt; 6.0,但在Android 5.1上产生以下崩溃

 Process: pro.kleinod.socialapp, PID: 19517

          java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 4:
                                                                    (?<name>\b\w+\b)\s*=\s*(?<value>"[^"]*"|'[^']*'+)

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

使用.*?代替<name><value>来抓取群组,这样就可以避免PatternSyntaxException

String regex = "(.*?\\b\\w+\\b)\\s*=\\s*(.*?\"[^\"]*\"|'[^']*'+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("id='1019' name='Beer' color='#e7c705'");
while(matcher.find()) {
    Log.e("TAG", matcher.group());
}

在Android 5.1上经过测试并正常运行。