2012-05-11 81 views

回答

4

哇。

您需要爲正則表達式構建解析器並將所有的標記/部分反轉。

在這種情況下

AB + DE是

A,B,+,d,E

和反向這是

E,d,+,B ,一個

現在想象組

((AB)(。+德))

反向是

((編+)(BA))

+1

+1似乎遞歸函數可能是一個很好的解決方案:繼續遞歸反轉子組,然後在備份堆棧的過程中將子組連接在一起(反向)。 – Paulpro

+0

像(?<=表達式)這樣的特殊正則表達式需要特別注意,因爲它看起來很像。但在java中......好吧......可能它不起作用 –

+0

是的,我只是爲了真正的正則表達式來實現這個功能。這基本上是串聯('.abc'),交替'。| a | b | c'和有限計數('。{2} a + b?c {,3}')。 – Paulpro

4

反轉幹草堆比針更容易。而且由於Matcher需要CharSequence而不是String,您可以通過簡單地打包String(請參閱Reverse a string in Java, in O(1)?的答案)以輕微的開銷執行此操作。

有了這些知識,您可以創建一個替代版本的Matcher,它似乎可以顛倒模式,但實際上只是反轉輸入。

0

Tiago Peczenyj是正確的,這兩個反向引用,捕獲組和命名組需要處理。因爲在Java RegEx中沒有限制命名組需要按名稱反向引用的命名組,所以可以像其他捕獲組一樣通過編號反向引用命名組。

如果有人對Java解決方案感興趣,我實現了一個庫來做到這一點。 https://github.com/vsch/reverse-regex

處理所有有效的Java正則表達式構造,並提供實用程序類來封裝模式,匹配器和輸入以進行反向搜索以處理所有需要的映射和反轉。