如何在撇号Android之间获取数据

时间:2013-06-25 11:17:36

标签: android regex

我试图从字符串中获取使用正则表达式的撇号之间的子串。 字符串的格式:Duplicate entry 'bla@bla.bl' for key 'email'。 我正在使用的正则表达式:'([^']*)

代码:

Pattern pattern = Pattern.compile("'([^']*)");
Matcher matcher = pattern.matcher(duplicated);
Log.d(TAG, matcher.group()));

我不确定matcher.group(),它返回一个匹配整个正则表达式的字符串。在我的情况下,它应该返回两个子串。

有人可以纠正这个正则表达式并给我一个解释吗? 提前致谢

4 个答案:

答案 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:电子邮件