Java Regex:在二进制字符串

时间:2017-01-18 10:53:45

标签: java regex

我想捕获二进制字符串中的所有连续组

1000011100001100111100001

应该给我

1
0000
111
0000
11
00
1111
0000
1

我在我的java应用程序中创建了([1?|0?]+)正则表达式,将字符串中的后续1或0分组为10000111000011。 但是当我在我的代码中运行它时,控制台中没有任何内容打印出来:

String name ="10000111000011";
    regex("(\\[1?|0?]+)" ,name);

    public static void regex(String regex, String searchedString) {

        Pattern pattern = Pattern.compile(regex);
        Matcher regexMatcher = pattern.matcher(searchedString);
        while (regexMatcher.find()) 
            if (regexMatcher.group().length() > 0)
                System.out.println(regexMatcher.group());
    }

为了避免在正则表达式的运行时出现语法错误,我已将([1?|0?]+)更改为(\\[1?|0?]+)

为什么没有基于正则表达式的组?

2 个答案:

答案 0 :(得分:2)

首先 - 仅作为解释 - 您的正则表达式定义与任何字符[匹配的字符类(] ... 1), ?|0一次或多次(+)。我认为你的意思是让( ... )加入其中,这会使|变更懒惰匹配0或{{1 }}。但那不是你想要的(我想;)。

现在,解决方案可能就是这样:

1

匹配([01])\1* 0,并将其捕获。然后它匹配任意数量的相同数字(1是对第一个捕获组中捕获的内容的后向引用 - 在本例中为\10)任意数量的次。

Check it out at ideone

答案 1 :(得分:1)

你可以试试这个:

(1+|0+)

Explanation

示例代码:

    final String regex = "(1+|0+)";
    final String string = "10000111000011\n"
            + "11001111110011";

    final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.MULTILINE);
    final Matcher matcher = pattern.matcher(string);

    while (matcher.find()) {

                System.out.println("Group " + 1 + ": " + matcher.group(1));


    }