我有一个像 google.com
这样的输入和一个像这样的值列表
1. *.com
2. *go*.com
3. *abc.com
4. *le.com
5. *.*
我需要在 java 中编写一个模式,它应该返回除 *abc.com
之外的所有匹配项。我尝试了一些,但没有达到预期的效果。请帮忙。提前致谢。
更新:
public static void main(String[] args) {
List<String> values = new ArrayList<String>();
values.add("*.com");
values.add("*go*.com");
values.add("*abc.com");
values.add("*le.com");
values.add("*.*");
String stringToMatch = "google.com";
for (String pattern : values) {
String regex = Pattern.quote(pattern).replace("*", ".*");
System.out.println(stringToMatch.matches(regex));
}
}
输出:
false
false
false
false
false
我试过了,但模式不匹配。
最佳答案
您可以将给定的模式转换为正则表达式,然后使用普通的正则表达式函数,如 String.matches():
for (String pattern : patterns) {
final String regex = pattern.replaceAll("[\\.\\[\\](){}?+|\\\\]", "\\\\$0").replace("*", ".*");
System.out.println(stringToMatch.matches(regex));
}
编辑:显然 Pattern.quote()
只是在字符串周围添加了 \Q...\E
。编辑为使用手动引用。
编辑 2:另一种可能性是:
final String regex = Pattern.quote(pattern).replace("*", "\\E.*\\Q");
关于java - 正则表达式 - 匹配模式与值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21307622/