java - 正则表达式 - 匹配模式与值列表

标签 java regex

我有一个像 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/

相关文章:

regex - Vim 正则表达式反向引用

javascript - 在选择之前和之后添加和删除字符

java.lang.Thread - threadStatus 从何而来?

java - Android 方 block 游戏

java - 如何在 Java 或 clojure 中使用 ImageJ 进行批量图像处理?

regex - Python正则表达式捕获多个组N次

Java: Antlr4 MySql 获取单个语句

java - 12 :00 am as end time is moving to next date

php - 正则表达式帮助 : how to match only either pattern in a regex that contains "or" operator?

javascript - Regex jQuery find ("option:[text^=' "]) 在 ie 8 和 chrome 上出现错误