Java 正则表达式模式以任意顺序匹配字符串
如何在java中使用正则表达式模式以无序顺序查找字符串Java 正则表达式模式以任意顺序匹配字符串,java,regex,Java,Regex,如何在java中使用正则表达式模式以无序顺序查找字符串abc的第一个匹配项 例如: 输入1:abcbaa 输入2:bcbaaa 输入3:cbaaab 输入1的第一个匹配:abcbaab 输入2的第一个匹配:bcbaab 输入3的第一个匹配:bcaaabc 我尝试过但不起作用的模式: (?:([abc])(?!\\.*]\\1)){3} (?!(.)\\1)[abc]{3} 上述两种模式匹配3个连续字符,包括重复值。示例:ababac预期:abababac 这一个匹配每个字符之间的空字符。i、
abc
的第一个匹配项
例如:
输入1:abcbaa输入2:bcbaaa
输入3:cbaaab
输入1的第一个匹配:abcbaab
输入2的第一个匹配:bcbaab
输入3的第一个匹配:bcaaabc
我尝试过但不起作用的模式:
(?:([abc])(?!\\.*]\\1)){3}
(?!(.)\\1)[abc]{3}
上述两种模式匹配3个连续字符,包括重复值。示例:ababac
预期:abababac
这一个匹配每个字符之间的空字符。i、 例如,字符串位置(0,0)、(1,1)、(2,2)等 你试过寻找所有的可能性吗?下面是您的示例:
(abc|acb|bca|bac|cab|cba)
也许你应该试试这个正则表达式:
^(?=[\s\S]*(a)+)(?=[\s\S]*(b)+)(?=[\s\S]*(c)+)[\s\S]*$
空组的作用类似于复选框,因此如果
\1\2\3
匹配,则每个字母必须至少出现一次。由于正则表达式只使用三个字符,您知道每个字母正好有一个。请显示一些代码。到目前为止你试过什么?因此,我们不会构建解决方案,而是回答特定的问题。去阅读一些关于regex的教程,您会发现您需要什么。您可能希望更深入地了解java.util.regex.Pattern和java.util.regex.Matchers类。类似于此解决方案事件的内容如果简单,并不能真正为您提供最佳性能(阶乘(n)复杂度)(.|\s)*
是而且永远不应该使用。相反,使用Java的DOTALL
标志,或者在正则表达式的开头添加(?s)
。谢谢你,Alan。我能用[^]*代替(.|\s)*吗?[^]
只在JavaScript风格中有用,它还没有DOTALL选项(还没有)。在Java中,这是一个语法错误。如果您使用的是JavaScript,我建议您改用[\s\s]
。它更长一些,但在不同的风格中效果相同,其含义更明显(任何空白字符+任何非空白字符=任何字符)。
^(?=[\s\S]*(a)+)(?=[\s\S]*(b)+)(?=[\s\S]*(c)+)[\s\S]*$
(?:a()|b()|c()){3}\1\2\3