【问题标题】:Using or '|' in regex [duplicate]使用或'|'在正则表达式中[重复]
【发布时间】:2018-06-01 07:56:41
【问题描述】:

我遇到了一个简单的问题,我想检查是否有任何单词:he, be, de 出现在我的文本中。

所以我使用“|”创建了模式(存在于代码中)象征或 然后我匹配我的文字。但是比赛给了我错误的结果(在打印声明中)。

我尝试使用正则表达式搜索在 Notepad++ 中进行相同的匹配,它在那里工作,但在 Java 中给出了 FALSE(不匹配)。 C

public class Del {
    public static void main(String[] args) {
        String pattern="he|be|de";
        String text= "he is ";
        System.out.println(text.matches(pattern));
    }
}

谁能建议我做错了什么。 谢谢

【问题讨论】:

  • String.matches(regex) 检查整​​个字符串是否匹配,而不仅仅是开头。
  • matches 方法尝试匹配整个字符串,而不是字符串的一部分。
  • 您也可以使用[hbd]e(但同样不能使用matches)。请注意:您还必须添加单词分隔符,否则它将匹配(我的意思是“查找”)bobshebob 中的hedipdedipdedap 中的de
  • 嗨@usr2564301,你为什么说它是重复的。试图将文本与模式匹配的人如何得出结论认为我应该寻找“查找”v/s 匹配差异。
  • ?因为它回答了这个问题?我所要做的就是搜索java match regex;这个 Stack Overflow 答案排在首位。

标签: java regex


【解决方案1】:

这是因为您试图匹配整个字符串而不是要查找的部分。例如,这段代码会发现只有一部分字符串符合当前的正则表达式:

Matcher m = Pattern.compile("he|be|de").matcher("he is ");
m.find(); //true

当您想匹配整个字符串并检查该字符串是否包含 he|be|de 时,请使用此正则表达式 .*(he|be|de).*

. 表示任何符号,* 是前一个符号,可能出现零次或多次。 示例:

"he is ".matches(".*(he|be|de).*"); //true

【讨论】:

  • 感谢您的解释。
  • @Geek 不客气
【解决方案2】:
    String regExp="he|be|de";
    Pattern pattern = Pattern.compile(regExp);   
    String text = "he is ";
    Matcher matcher = pattern.matcher(text);
    System.out.println(matcher.find()); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多