簡體   English   中英

如何在Java的正則表達式中使用OR?

[英]How to use OR in a regex expression for Java?

我想接受這兩種情況, I_LOVE_TO_CODE.txtI_LOVE_TO_CODE_20151125.txt 我知道如何分別為每一個做:

^I_LOVE_TO_CODE.txt$
^I_LOVE_TO_CODE_\d{8}\.txt$

但是如何在一個正則表達式中插入OR條件?

在這種情況下,您不需要| OR )運算符,因為它將是一個低效的解決方案。 ^I_LOVE_TO_CODE_\\d{8}\\.txt$|^I_LOVE_TO_CODE\\.txt$涉及很多回溯。 你可以將它收縮到^(I_LOVE_TO_CODE_\\d{8}\\.txt|I_LOVE_TO_CODE\\.txt)$ (其中錨點適用於兩個子表達式,但只使用一次),或^I_LOVE_TO_CODE(_\\d{8}\\.txt|)$ - 已經好多了, 但是可以使用可選分組完全避免交替。

像這樣使用可選組:

^I_LOVE_TO_CODE(?:_\d{8})?\.txt$
               ^^^      ^^ 

請參閱正則表達式演示

(?:_\\d{8})? 表示匹配下划線后跟8位數一次或零次,但不捕獲子串 除非你需要使用該值,否則你可以不進行捕獲( (_\\d{8})?)組。

有關交替操作員可選項的更多詳細信息,請訪問Regular-Expressions.info

在您嘗試匹配的模式的特定情況下,其中一個模式與另一個模式相同,只需“在中間添加一點”,您可以使用可選組,如stribizhev建議的那樣。

如果你試圖匹配兩個(或更多)一般的東西,你可以使用| 運算符,如模式javadoc中所述

"^(?:foo|bar|baz)$"

會匹配"foo""bar""baz"

我完全不明白你的問題。 在正則表達式中,您可以使用| 確定|之前的值 或之后的值。

您可以將它們保存在不同的變量中,例如:

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返回true boolean

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM