我希望使用正则表达式匹配字符串中的某些字符组,而不依赖于它们在字符串中的顺序。但是,唯一的要求是他们都必须在那里。
我试过了
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);
}
这不起作用。我已经搜索了很长一段时间,但是当模式中的所有字符必须独立于它们的顺序存在于字符串中时,我找不到一个例子。
谢谢
答案 0 :(得分:1)
你可以为此编写正则表达式,但它看起来不太好看。如果您想检查字符串是否包含x
和y
,则需要使用look-ahead几次
^(?=.*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;
}
答案 1 :(得分:0)
您可以使用replaceAll
方法从搜索字符串构建模式:
String s = "12";
String pattern = s.replaceAll("(.)", "(?=[^$1]*$1)");
注意:您不能多次测试相同的字符。 (即112
提供与(?=[^1]*1)(?=[^1]*1)(?=[^2]*2)
完全相同的(?=[^1]*1)(?=[^2]*2)
但在我看来,Pshemo方法可能更有效率。