我试图从字符串中获取使用正则表达式的撇号之间的子串。
字符串的格式:Duplicate entry 'bla@bla.bl' for key 'email'
。
我正在使用的正则表达式:'([^']*)
。
代码:
Pattern pattern = Pattern.compile("'([^']*)");
Matcher matcher = pattern.matcher(duplicated);
Log.d(TAG, matcher.group()));
我不确定matcher.group()
,它返回一个匹配整个正则表达式的字符串。在我的情况下,它应该返回两个子串。
有人可以纠正这个正则表达式并给我一个解释吗? 提前致谢
答案 0 :(得分:2)
最好使用.split()
代替模式匹配。它简单的硬编码。请按以下步骤操作:
String[] strSplitted = <Your String>.split("`");
然后,strSplitted数组包含在`。
之间分割的字符串答案 1 :(得分:1)
我会使用这个正则表达式。它几乎与你的完全一样,但我包含了收盘单引号。这是为了防止在下一场比赛中使用结束单引号。
'([^']*)'
要获取单引号内的内容,请使用与此类似的行:
matcher.group(1)
这是一个Java示例:
Pattern regex = Pattern.compile("'([^']*)'", Pattern.MULTILINE);
Matcher matcher = regex.matcher(duplicated);
while (matcher.find()) {
Log.d(TAG, matcher.group(1)));
}
答案 2 :(得分:1)
这是我测试过的解决方案。您必须致电find
Pattern pattern = Pattern.compile("'([^']*)'");
String duplicated = "Duplicate entry 'bla@bla.bl' for key 'email'";
Matcher matcher = pattern.matcher(duplicated);
String a = "";
while (matcher.find()) {
a += matcher.group(1) + "\n";
}
结果:
bla@bla.bl
email
答案 3 :(得分:1)
我发明了如下的解决方案。
int second_index = 0;
String str = "Duplicate entry 'bla@bla.bl' for key 'email'";
while (true) {
if (second_index == 0)
first_index = str.indexOf("'", second_index);
else
first_index = str.indexOf("'", second_index + 1);
if (first_index == -1)
break;
second_index = str.indexOf("'", first_index + 1);
if (second_index == -1)
break;
String temp = str.substring(first_index + 1, second_index);
Log.d("TAG",temp);
}
输出
06-25 17:25:17.689:bla@bla.bl
06-25 17:25:17.689:电子邮件