Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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,如何在java中使用正则表达式模式以无序顺序查找字符串abc的第一个匹配项 例如: 输入1:abcbaa 输入2:bcbaaa 输入3:cbaaab 输入1的第一个匹配:abcbaab 输入2的第一个匹配:bcbaab 输入3的第一个匹配:bcaaabc 我尝试过但不起作用的模式: (?:([abc])(?!\\.*]\\1)){3} (?!(.)\\1)[abc]{3} 上述两种模式匹配3个连续字符,包括重复值。示例:ababac预期:abababac 这一个匹配每个字符之间的空字符。i、

如何在java中使用正则表达式模式以无序顺序查找字符串
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