我正在努力通過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,所以\2
是xx
,這就是所有匹配。但是當我添加錨時,比賽跳轉到該線的末尾。
我的表達可用於這些:
xxxxxxxxxxxx % xx = x
xxxxx % xxx = xxxx
其中該結果分別爲0和2也是。
那又怎麼樣?我在表達的邏輯中錯過了一個基本問題嗎?
我想清楚發生了什麼事。正則表達式引擎可以選擇匹配\1
的模式比它可能更少,並且在這兩種情況下,這允許它擴展\2
匹配,因此它與rhs相等。現在要弄清楚如何強制它真的很貪婪......也許再看一次?建議是受歡迎的。
組2可以調節組1可匹配的行爲。 – sln