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,我想使用regex-function匹配字符串中的特定字符组,而不依赖于它们在字符串中的顺序。然而,唯一的要求是他们都必须在那里 我试过了 String elD = "15672"; String t = "12"; if ((elD.matches(".*[" + t + "].*"))) { System.out.println(elD); } 这一个检查是否存在任何字符。但我希望他们都在那里 我也试过了 String elD = "15672"; String t = "12";

我想使用regex-function匹配字符串中的特定字符组,而不依赖于它们在字符串中的顺序。然而,唯一的要求是他们都必须在那里

我试过了

String elD = "15672";
String t = "12";
if ((elD.matches(".*[" + t + "].*"))) {
    System.out.println(elD);
}
这一个检查是否存在任何字符。但我希望他们都在那里

我也试过了

String elD = "15672";
String t = "12";
if ((elD.matches(".*(" + t + ").*"))) {
    System.out.println(elD);
}
这也不管用。我已经搜索了很长一段时间,但是我找不到一个例子,当模式中的所有字符必须独立于它们的顺序出现在字符串中时


谢谢

您可以为此编写正则表达式,但它看起来不太好看。如果要检查字符串是否包含
x
y
的任何位置,则需要使用以下几次

像这样使用它

yourStirng.matches(regex);
但是,通过这种方式,您需要创建自己的方法,该方法将生成动态正则表达式,并为要检查的每个字符添加
(?=.*X)
。您还需要确保此字符在正则表达式中不是特殊的,如
+

更简单且有效的解决方案是创建自己的方法,该方法将检查字符串是否包含所有搜索的字符,如

public static boolean containsUnordered(String input, String searchFor){
    char[] characters = searchFor.toCharArray();
    for (char c: characters)
        if (!input.contains(String.valueOf(c)))
            return false;
    return true;
}

您可以使用
replaceAll
方法从搜索字符串构建模式:

String s = "12";

String pattern = s.replaceAll("(.)", "(?=[^$1]*$1)");
注意:不能多次测试同一个字符。(即,
112
给出的
(?=[^1]*1)(?=[^1]*1)(?=[^2]*2)
(?=[^1]*1)(?=[^2]*2)
完全相同)


但在我看来,Pshemo方法可能更有效。

尝试拆分t,然后在每个字母中间添加。*。因此它将类似于.*t[0].*t[1].*t[2].。这相当不方便。我将多次使用该过程,而不是一次,因此我不能每次手动拆分,但无论如何,谢谢!您不必手动拆分它。你可以写一个小代码,你真的需要在这里使用正则表达式吗?这是一个相当简单的任务。我认为Java中一定有一个内置的正则表达式,因为使用正则表达式比在序列中循环更优雅?我将用安全的方法来处理循环。谢谢
String s = "12";

String pattern = s.replaceAll("(.)", "(?=[^$1]*$1)");