2013-03-30 86 views
0

是否可以只使用正則表達式(無附加代碼!)來匹配第n個匹配項?例如,我想匹配\ 002的第二,第四,第六,第八,第十,第十二等出現,但跳過以下字符串中的第1,3,5,7等等:在Java正則表達式中提取第n次發生

「CAR」\ 002「TRAIN」\ 002「BOAT」\ 002「BICYCLE」\ 002「HOUSE」\ 002「TENNIS」\ 002「BED」\ 002「KITCHEN」\ 002「LOVE」\ 002「HAPPENIES」

There are anyone有一個純正則表達式的解決方案呢?我需要這個,因爲我不能改變使用正則表達式的代碼,但我可以提供一個正則表達式。

在此先感謝

+0

關於可能性,是的,這是可能的,我可以想到一個很容易做到這一點的DFA(匹配模數n)。我會等待一些嚮導來爲此提供有趣的RegExps :) –

回答

0

嗯,是的,你只是加倍的正則表達式:

\002[^\002]*(\002) 

一般匹配特定字符串的每個第n次出現,你可以使用{}

(?:\002[^\002]*){n-1}(\002) 
+0

感謝您的輸入,但我測試過了,它不起作用 – user1309258

+0

從您的問題*不清楚正則表達式正在測試中。這個解決方案假設它用在'while(matcher.find())'類型的循環中。 – nneonneo

+0

我試圖用regbuddy測試它 – user1309258