2010-09-10 120 views
4

我有一個條件正則表達式,適用於正則表達式測試網站,如regexlib.com,但無法讓它在我的Java應用程序中工作。Java中的條件正則表達式?

但是,http://www.regular-expressions.info/conditional.html表明Java不支持條件,但是我看過SO上的其他帖子暗示它的確如此。

我正則表達式的一個例子是:(?(?=^[0-9])(317866?)|[a-zA-Z0-9]{6}(317866?))

應該符合以下任一輸入:317866317866A12或​​

如何解決這個Java的限制?

TIA

+0

它應該與「31786」匹配嗎?如果不是,那麼最後6點之後呢? – 2010-09-10 20:42:52

回答

5

條件表達式不被java.util.regex.Pattern類支持。 爲了解決這個問題,你可以使用第三方的正則表達式庫,例如JRegex

1

這樣做呢?

 
(?:[a-zA-Z0-9]{6})?(317866?) 

或者,如果你知道的更長的版本總是以字母開頭,那麼你可以使用這個:

 
(?:[a-zA-Z][a-zA-Z0-9]{5})?(317866?) 

它首先會嘗試匹配6個字母數字,然後31786或317866,如果這失敗後會回溯並嘗試匹配31786或317866.

+0

感謝您的快速回復......我並不真正熟悉RegEx,我沒有意識到它可能很簡單。我的商業規則是:如果以alpha開頭,則忽略前6個,如果它以數字開頭,則從頭開始匹配。所以,第二個例子似乎更完整。 – RNeuendorff 2010-09-10 20:16:49

+0

@RNeuendorff:第二個示例應該可以工作,它不會匹配第一個表達式匹配的「123456316866」。我想你想要第二個例子。 – 2010-09-10 20:20:19

+0

@Mark Byers:這個正則表達式並不完全準確。我不想匹配諸如「AB1363183A23」之類的東西,但該正則表達式的確如此。 – RNeuendorff 2010-09-10 20:28:09