2014-08-28 33 views
0

我有一個字符序列的正則表達式。我想把序列部分分組。Java的正則表達式{X}捕獲組

Pattern e_1394Pattern = Pattern 
     .compile("\\dR\\|\\d\\|(((([^\\|]))*\\|){11})"); 

String resultLine = "\4R|1|^^^02^Myo^1021406330|25.6^F|ng/mL||N||F||Administrator||20140318215839|"; 

此模式工作正常,但我需要以下部分(((([^\\|]))*\\|){11})的組。 這可能使用短正則表達式嗎?

這是沒辦法:\\dR\\|\\d\\|((([^\\|]))*\\|) ((([^\\|]))*\\|) ((([^\\|]))*\\|) ((([^\\|]))*\\|)....

+0

可能重複的[爪哇正則表達式:重複捕獲組(http://stackoverflow.com/questions/6939526/java-regex-repeating-capturing-groups) – Joe 2014-08-28 13:22:07

+0

對不起,我認爲這是不一樣的......我想要組中的正則表達式'(ab){n}'的重複部分。這是一個組的結果'ab' – 2014-08-28 13:50:26

回答

0

不知道我理解你的需要,但如何:

您可以重複圖案(?1)\g1將重複使用的第1組的模式,這取決於正則表達式味道。

在你的情況:

"\\dR\\|\\d\\|(((([^\\|]))*\\|){11})" 

相同(除去多餘分組):

"\\dR\\|\\d\\|([^\\|]*\\|)(?1)(?1)(?1)(?1)(?1)(?1)(?1)(?1)(?1)(?1)" 
+0

Java不支持子程序調用。無論如何,不​​像Java 8那樣。 – 2014-08-28 18:29:01

+0

@AlanMoore:太糟糕了:(我爲那些處理另一種語言的人保留了答案。 – Toto 2014-08-29 07:02:51