我想捕获二进制字符串中的所有连续组
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?]+)
为什么没有基于正则表达式的组?
答案 0 :(得分:2)
首先 - 仅作为解释 - 您的正则表达式定义与任何字符[
匹配的字符类(]
... 1
), ?
,|
或0
一次或多次(+
)。我认为你的意思是让(
... )
加入其中,这会使|
变更懒惰匹配0
或{{1 }}。但那不是你想要的(我想;)。
现在,解决方案可能就是这样:
1
匹配([01])\1*
或0
,并将其捕获。然后它匹配任意数量的相同数字(1
是对第一个捕获组中捕获的内容的后向引用 - 在本例中为\1
或0
)任意数量的次。
答案 1 :(得分:1)
你可以试试这个:
(1+|0+)
示例代码:
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));
}