【问题标题】:How to use regex for matching multiple words如何使用正则表达式匹配多个单词
【发布时间】:2015-08-21 00:53:49
【问题描述】:

如何使用正则表达式匹配java中的多个单词?比如addAction("word")intentFilter("word")同时进行匹配?

我试过了:

string REGEX ="[\\baddAction\\b|\\bintentFilter\\b]\\s*\([\"]\\s*\\bword\\b\\s*[\"]\)";

谁能告诉我这种格式有什么问题,我该如何解决?

【问题讨论】:

    标签: java regex matching


    【解决方案1】:

    您尝试在正则表达式中使用alternative lists,但您使用的是a character class ("[\\baddAction\\b|\\bintentFilter\\b])。对于字符类,其中的所有字符都是单独匹配的,而不是作为给定的序列。

    您学习了word boundary,还需要了解grouping 的工作原理。

    你有一个结构:单词字符 + 双引号和括号中的单词

    所以,你需要对第一个进行分组,最好使用非捕获组,并从word中删除一些单词边界(在指定的上下文中是多余的):

    String rgx ="\\b(?:addAction|intentFilter)\\b\\s*\\(\"\\s*word\\s*\"\\)";
    System.out.println("addAction(\"word\")".matches(rgx));
    System.out.println("intentFilter(\"word\")".matches(rgx));
    

    the demo的输出

    true
    true
    

    【讨论】:

    • 感谢您的回复,可以了!但是,我可以用字符串列表代替那个“单词”吗?比如 while((line = bufferedReader.readLine()) != null) { list.add("\\b(?:addAction|IntentFilter)\\b\\s*\(\"\\s* line \ \s*\"\)"); } bufferedReader.close();
    • 在大多数情况下,您无需任何额外步骤即可使用这种替代生成器,只需确保没有特殊字符,如果有,您需要使用 @987654326 转义 line @.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2022-01-20
    相关资源
    最近更新 更多