正则表达式模式以任何顺序匹配字符串

时间:2016-07-25 13:06:24

标签: java regex

如何在java中使用正则表达式模式以混洗顺序查找字符串abc的第一个匹配项?

示例:

输入1:abcbaa
输入2:bcbaaa
输入3:cbaaab

输入1的第一场比赛: abc baab
输入2的第一场比赛:b cba aab
输入3的第一场比赛: bca aabc

我尝试过的模式不起作用:

(?:([abc])(?!\\.*]\\1)){3}
(?!(.)\\1)[abc]{3}

以上两种模式匹配3个连续字符,包括重复值。例如: aba bac
预期: aba BAC

(?=.*[abc])(?=.*[abc])(?=.*[abc])

这个匹配并在每个角色之间填充空字符。即,字符串位置(0,0),(1,1),(2,2)等...

3 个答案:

答案 0 :(得分:1)

您是否尝试过寻找所有可能性?你的例子就像这样:

(abc|acb|bca|bac|cab|cba)

答案 1 :(得分:1)

也许你应该试试这个正则表达式:

^(?=[\s\S]*(a)+)(?=[\s\S]*(b)+)(?=[\s\S]*(c)+)[\s\S]*$

答案 2 :(得分:0)

(?:a()|b()|c()){3}\1\2\3

空组的作用类似于复选框,因此如果\1\2\3匹配,则每个字母必须至少看过一次。由于正则表达式只消耗三个字符,因此您知道每个字母中只有一个字符。