Java正则表达式:如何在模式匹配中重用已使用的字符?
有没有办法在模式匹配中重用源的已使用字符 例如,假设我想找到一个带有正则表达式Java正则表达式:如何在模式匹配中重用已使用的字符?,java,regex,Java,Regex,有没有办法在模式匹配中重用源的已使用字符 例如,假设我想找到一个带有正则表达式(a+b+| b+a+ i、 e.多个a后面跟着多个b,反之亦然 假设输入是aaaabbbaaaab 然后使用正则表达式的输出将是aaaabbb和aaaaab 我怎样才能得到输出 aaaabbb bbbaaaaa aaaaab 这样试试 String data = "aaaabbbaaaaab"; Matcher m = Pattern.compile("(?=(a+b+|b+a+))(^|(?<=a)b|(?
(a+b+| b+a+
i、 e.多个a后面跟着多个b,反之亦然
假设输入是aaaabbbaaaab
然后使用正则表达式的输出将是aaaabbb
和aaaaab
我怎样才能得到输出
aaaabbb
bbbaaaaa
aaaaab
这样试试
String data = "aaaabbbaaaaab";
Matcher m = Pattern.compile("(?=(a+b+|b+a+))(^|(?<=a)b|(?<=b)a)").matcher(data);
while(m.find())
System.out.println(m.group(1));
此正则表达式中基本上需要
^
是的,如果没有^
,此正则表达式将无法捕获放置在输入开头的aaaabbb
如果我不添加
(^ |)(?,您可以使用lookbehind模拟这一点:
((?<=a)b+|(?<=b)a+)
你不能重新定义一个角色。你必须修改reg-ex以匹配你想要的。这应该能够帮助你:非常感谢:)。这是一个非常清楚的答案。我看了一下regex buddy,但仍然有一些困惑,因为我对regex非常陌生。在regex表达式中,请您进一步解释一下^.@dgun^
是否匹配字符串开头。此正则表达式中是否需要^?为什么呢?(抱歉,如果这是愚蠢的,我只是好奇:)@dgun检查我编辑的答案。如果有些事情你仍然不明白,就问吧。这很有帮助:)。非常感谢。
aaaabbb
aaabbb
aabbb
abbb
bbbaaaaa
bbaaaaa
baaaaa
aaaaab
aaaab
aaab
aab
ab
((?<=a)b+|(?<=b)a+)
bbb aaaaa b