如何在Java的正则表达式中使用或?
我想接受这两种情况,如何在Java的正则表达式中使用或?,java,regex,Java,Regex,我想接受这两种情况,I_LOVE\u to_code.txt或I_LOVE\u to_code\u 20151125.txt。我知道如何分别处理每一个问题: ^I_LOVE_TO_CODE.txt$ ^I_LOVE_TO_CODE_\d{8}\.txt$ 但是如何在一个正则表达式中插入或条件呢?在这种情况下,您不需要|(OR)运算符,因为这是一个低效的解决方案。^I_LOVE_TO_code{8}.txt$^I_LOVE_TO_code.txt$涉及很多回溯。您可以将它与^(I_LOVE_to
I_LOVE\u to_code.txt
或I_LOVE\u to_code\u 20151125.txt
。我知道如何分别处理每一个问题:
^I_LOVE_TO_CODE.txt$
^I_LOVE_TO_CODE_\d{8}\.txt$
但是如何在一个正则表达式中插入
或条件呢?在这种情况下,您不需要|(OR)运算符,因为这是一个低效的解决方案。^I_LOVE_TO_code{8}.txt$^I_LOVE_TO_code.txt$
涉及很多回溯。您可以将它与^(I_LOVE_to_code_\d{8}.txt | I_LOVE_to_code\.txt)$
(其中锚点应用于两个子表达式,但只使用一次),或^I_LOVE_to_code(u\d{8}.txt)$
,这已经好得多了,但在这里使用可选分组可以完全避免交替
在此处使用如下可选组:
^I_LOVE_TO_CODE(?:_\d{8})?\.txt$
^^^ ^^
看
(?:\d{8})
表示匹配一个下划线,后跟8位数字1次或0次,但不捕获子字符串。除非需要使用该值,否则无需捕获((\d{8})
组即可
有关和的更多详细信息,请访问。我不太明白您的问题。在正则表达式中,可以使用
确定
前面的值或后面的值
您可以在不同的变量中保存这两个变量,如:
String var01= "your route to the .txt file";
String var02= "your route to the .txt file";
String regex= "your regex";
之后,可以使用if
语句,如:
if((var01||var02).matches(regex)) {
System.out.println("Succes!");
}
else {
System.out.println("Validation failed!");
}
请注意,.matches
如果验证成功匹配,则返回一个真布尔值。在您尝试匹配的特定模式中,其中一个模式与另一个模式相同,只需在中间添加一个位,您可以使用可选组,如Stribizev所建议的
如果您试图在一般情况下匹配两个(或更多)项中的任何一项,则可以使用
运算符,如中所述:
将匹配“foo”
、“bar”
或“baz”
这应该是一个注释,正如您所说,“应该”。我没有足够的声誉在那里发表评论,所以我唯一能帮助别人的方法就是直接回答。对不起,我知道。这就是为什么我没有否决你的答案:)。我们所有人(我猜连Jon skeet)都是从那里开始的:P@FerranBuireu:如果您添加有关如何使用|
实现OP所需结果的更多信息,我将向上投票。现在,这是一个纯粹的评论。哦,我没有意识到,是我的错。哇!太快了!谢谢你,先生!我添加了更多的解释和链接。@MadushanPerera-几乎是很棒的东西。我猜天河二号超级计算机会打败他:事实上,我花了6分钟。我首先用正则表达式说明了一个解决方案,然后添加了一个演示链接,然后添加了一些解释,然后详细介绍了实现当前目标的其他可能性,然后添加了一些参考链接。我通常的回答方式。只需注意Java的用法:反斜杠必须加倍,而且.matches()
不需要锚定。例如=>true
"^(?:foo|bar|baz)$"