为什么以下模式不适用于所有 OS 版本?
Why does the following Pattern not work for all OS versions?
在 https://regex101.com/r/Q6lTN8/1
上测试了以下正则表达式
Pattern pattern = Pattern.compile("(?<name>\b\w+\b)\s*=\s*(?<value>\"[^\"]*\"|'[^']*'+)");
使用此输入文本
id='1019' name='Beer' color='#e7c705'
在 Android 版本 > 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>"[^"]*"|'[^']*'+)
可能是什么问题?
使用 .*?
而不是 <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.
上测试并运行良好
在 https://regex101.com/r/Q6lTN8/1
上测试了以下正则表达式Pattern pattern = Pattern.compile("(?<name>\b\w+\b)\s*=\s*(?<value>\"[^\"]*\"|'[^']*'+)");
使用此输入文本
id='1019' name='Beer' color='#e7c705'
在 Android 版本 > 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>"[^"]*"|'[^']*'+)
可能是什么问题?
使用 .*?
而不是 <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.
上测试并运行良好