Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java的正则表达式中使用或?_Java_Regex - Fatal编程技术网

如何在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)$"