Java - 相同模式之间的模式匹配

时间:2016-08-08 09:35:21

标签: java regex

我的示例字符串:

 a ghgduysgd a fdferfdf a bvfxbgdf a gdfgdfg

我需要找到一个'之间的所有内容。

我有(?<=a).*但它匹配后的所有内容。但我想找到一个。

第一次迭代:ghgduysgd

第二次迭代:fdferfdf

我想获得类似上面的数据进行操作。你能帮助正则表达式吗?

3 个答案:

答案 0 :(得分:5)

您可以尝试这样的正则表达式(并忽略第一个值)

String path = "a ghgduysgd a fdferfdf a bvfxbgdf a gdfgdfg";
String[] arr = path.split("(\\s+)?a(\\s+|$)"); // split based on a preceeded and followed by space
for (String s : arr) {
    System.out.println(s);
}

O / P:

// Empty String here. Since your String starts with a
ghgduysgd
fdferfdf
bvfxbgdf
gdfgdfg

答案 1 :(得分:1)

你可以在正则表达式中使用lookbehind,将其更改为使用前瞻:

(?<=a).*(?=a|$)

然后让.*非贪婪停在第一个可用的“结尾”a

(?<=a).*?(?=a|$)

编辑:a|$来自下方的tobias_k评论,原来只是a

答案 2 :(得分:1)

您可以将字符串拆分为&#34; a&#34;然后修剪空格并将其保存在ArrayList中。然后,如果你想打印整个单词,你可以使用Stringbuilder来连接字符串。

   String word="a ghgduysgd a fdferfdf a bvfxbgdf a gdfgdfg";
        List<String> list=new ArrayList<String>();
        list= Arrays.asList(word.split("a")); 
        StringBuilder sb = new StringBuilder();
        for(String item: list){
            item.trim();
        System.out.println(item);
        sb.append(item);
        }

        System.out.println(sb);