Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式:如何在模式匹配中重用已使用的字符?_Java_Regex - Fatal编程技术网

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