java - 匹配器无法匹配

标签 java regex

我有以下代码。我需要检查文本中是否存在某些禁用单词列表中的任何单词。但即使这个词存在于文本匹配器中也看不到它。这是代码:

final ArrayList<String> regexps = config.getProperty(property);
   for (String regexp: regexps){
   Pattern pt = Pattern.compile("(" + regexp + ")", Pattern.CASE_INSENSITIVE);
   Matcher mt = pt.matcher(plainText);                        
   if (mt.find()){
      result = result + "message can't be processed because it doesn't satisfy the rule " + property;
      reason = false;
      System.out.println("reason" + mt.group() + regexp);
                        }
                    }

出了什么问题?此代码无法找到正则表达式 в[ыy][шs]лит[еe],即 plainText = "Вышлите пожалуйста новый счет на оплату 中的 regexp上 Санг, пока согласовывали, уже прошли его сроки。 Лиценз..."。我还尝试了 regexp 的另一种变体,但一切都没用

最佳答案

问题出在别处。

import java.util.regex.*;

public class HelloWorld {

    public static void main(String []args) {
        Pattern pt = Pattern.compile("(qwer)");
        Matcher mt = pt.matcher("asdf qwer zxcv");
        System.out.println(mt.find());
    }
}

这打印出 true。不过,您可能想使用单词边界作为分隔符:

import java.util.regex.*;

public class HelloWorld {

    public static void main(String []args) {
        Pattern pt = Pattern.compile("\\bqwer\\b");
        Matcher mt = pt.matcher("asdf qwer zxcv");
        System.out.println(mt.find());
        mt = pt.matcher("asdfqwer zxcv");
        System.out.println(mt.find());
    }
}

除非您需要捕获组中的关键字,否则括号是无用的。但你一开始就已经拥有了它。

关于java - 匹配器无法匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17151607/

相关文章:

java - Jmeter,如何增加堆大小

Java 2D 导航网格生成

c# - 正则表达式分隔两个括号封闭项目

php - 在 php 中用正则表达式替换短代码

javascript - 如何使用正则表达式更新有路径和无路径的图像

在 react 形式上使用正则表达式进行 Angular 7 电子邮件验证

java - 使用 Java Servlet 进行长时间登录的最佳方式

java - 如何将以下 Java 代码转换为 Node.js?

java - Java中的 vector 空间模型算法来获得两个人之间的相似度分数

python - 具有lookbehind的正则表达式无法使用re.match工作