Java 匹配字符串中的所有字符,与它们在序列中的顺序无关
我想使用regex-function匹配字符串中的特定字符组,而不依赖于它们在字符串中的顺序。然而,唯一的要求是他们都必须在那里 我试过了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";
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)");