Java正则表达式:在二进制字符串中对连续的1或0进行分组
我想捕获二进制字符串中的所有连续组Java正则表达式:在二进制字符串中对连续的1或0进行分组,java,regex,Java,Regex,我想捕获二进制字符串中的所有连续组 1000011100001100111100001 应该给我 1 0000 111 0000 11 00 1111 0000 1 我在java应用程序中使用了([1?| 0?]+)regex,将字符串中的相应1或0分组,如1000011000011。 但当我在代码中运行它时,控制台中没有打印任何内容: String name ="10000111000011"; regex("(\\[1?|0?]+)" ,name); public st
1000011100001100111100001
应该给我
1
0000
111
0000
11
00
1111
0000
1
我在java应用程序中使用了([1?| 0?]+)
regex,将字符串中的相应1或0分组,如1000011000011
。
但当我在代码中运行它时,控制台中没有打印任何内容:
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?]+)
为什么没有基于正则表达式的组?您可以尝试以下方法:
(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));
}
首先,作为一种解释,正则表达式定义了一个字符类(
[
..]
),它与任何字符1
、?
、|
或0
匹配一次或多次(+
)。我想你的意思是在它里面有(
…)
,除此之外,这将使
成为一个与0
或1
匹配的替代。但那也不是你想要的(我想;)
现在,解决方案可能是:
([01])\1*
它匹配0
或1
,并捕获它。然后,它会多次匹配相同数字的任何数字(\1
是第一个捕获组中捕获的内容的反向引用-在本例中是0
或1
)
.您的正则表达式也不会打印任何内容(\[01])\1请检查添加的示例。添加了解释以回答问题。@Quota Correct,它捕获第一个数字。但是如果您检查OP的示例,则使用完全匹配-
regexMatcher.group()
(没有任何数字作为group
的参数提供完全匹配)。@Quota这可能是真的-可能更容易理解。在这种情况下,您甚至可以通过删除捕获组-0+| 1+
来进一步简化它,这使得它(更)高效。不过,我给出的一个可以很容易地为其他应用程序修改(例如字母的匹配范围(\w)\1*
)。但这不在范围之内,所以…请解释一下你为什么否决这个问题?我编辑了我的问题,我知道。它只考虑一个群体。但你不应该因此而否决我:(下次请从一开始就提供示例输入和输出:)是的,当然。我只是想,测试站点接受了它,但我没有注意到它只接受了一个组