2015-09-01 39 views
4

我正在努力通過regex golf的獎金水平,我目前在模數問題。使用的正則表達式引擎是"theoretically ECMAScript, but browser implementations vary, often by version."我不知道我的頭頂是我的瀏覽器(Firefox 34.0)運行的版本。正則表達式模量故障?

基本上,這個想法是相匹配的形式

x* % x+ = x* 

其中重複x的量表示數字的表達。捕獲只能匹配有效的模操作。

我最好的解決辦法,到目前爲止是這樣的:

^(?=x+ % (x+))\1*(x*) % x+ = \2$ 

也就是說,我用一個超前獲得的x的數量在第二組中,很多次,我可以匹配這個模式,然後獲得反向引用,其餘部分必須是右側的模式。

現在只要這種雲出現的工作,但它的失敗(錯誤匹配)在兩個具體情況:

xxxxx % xxxxx = xxxxx 
xxxxxxxxxxxxxx % xxx = xxxxx 

一個特定的正則表達式高爾夫實施很酷的功能是,它表明你正在匹配的字符串部分。什麼是真正有趣的是,如果我脫下結束線結合(在$),兩個匹配的區域從行的開頭轉到^如下:

xxxxx % xxxxx = xxxxx 
      ^
xxxxxxxxxxxxxx % xxx = xxxxx 
         ^

這正是我將懷疑 - 第一個吞噬整個第二個x組,因此\2結果是空的。在第二個,真正的結果是2,所以\2xx,這就是所有匹配。但是當我添加錨時,比賽跳轉到該線的末尾。

我的表達可用於這些:

xxxxxxxxxxxx % xx = x 
xxxxx % xxx = xxxx 

其中該結果分別爲0和2也是。

那又怎麼樣?我在表達的邏輯中錯過了一個基本問題嗎?


我想清楚發生了什麼事。正則表達式引擎可以選擇匹配\1的模式比它可能更少,並且在這兩種情況下,這允許它擴展\2匹配,因此它與rhs相等。現在要弄清楚如何強制它真的很貪婪......也許再看一次?建議是受歡迎的。

+0

組2可以調節組1可匹配的行爲。 – sln

回答