使用或'|'在正则表达式中[重复]

Posted

技术标签:

【中文标题】使用或\'|\'在正则表达式中[重复]【英文标题】: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 答案排在首位。 【参考方案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()); 

【讨论】:

以上是关于使用或'|'在正则表达式中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 git 上搜索特定的关键字或正则表达式模式 [重复]

正则表达式如何匹配多行的所有任意字符

C# MVC 4 应用程序中的电子邮件地址验证:使用或不使用正则表达式 [重复]

.NET 正则表达式匹配重复字符[重复]

使用正则表达式转义单引号字符串中的所有双引号 [重复]

Python标准库01正则表达式