3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
您說(shuō)您了解這部分,但是為了強(qiáng)調(diào),生成的字符串的長(zhǎng)度等于提供的數(shù)字。因此,當(dāng)且僅當(dāng)字符串包含三個(gè)字符n == 3。
.?
正則表達(dá)式的第一部分說(shuō):“任何字符,零次或一次”。因此,基本上有零個(gè)或一個(gè)字符-或,按照我上面提到的,n == 0 || n == 1。如果我們有匹配項(xiàng),則返回該否定項(xiàng)。這與零和一不是質(zhì)數(shù)這一事實(shí)相對(duì)應(yīng)。
(..+?)\\1+
正則表達(dá)式的第二部分有些麻煩,它依賴(lài)于組和反向引用。組是括號(hào)內(nèi)的任何內(nèi)容,然后將由正則表達(dá)式引擎捕獲并存儲(chǔ)以供以后使用。反向引用是一個(gè)匹配的組,稍后將在同一正則表達(dá)式中使用。
該組捕獲1個(gè)字符,然后捕獲1個(gè)或更多字符。(+字符表示一個(gè)或多個(gè),但僅表示前一個(gè)字符或組。因此,這不是“兩個(gè)或四個(gè)或六個(gè)等字符”,而是“兩個(gè)或三個(gè)等。” +?類(lèi)似于+,但是它會(huì)嘗試匹配盡可能少的字符。+通常會(huì)嘗試對(duì)整個(gè)字符串進(jìn)行吞噬,這在這種情況下很糟糕,因?yàn)檫@會(huì)阻止反向引用部分正常工作。)
下一部分是反向引用:同一組字符(兩個(gè)或更多)再次出現(xiàn)。所述反向引用出現(xiàn)一次或多次。
所以。捕獲的組對(duì)應(yīng)于捕獲的自然字符數(shù)(從2開(kāi)始)。該組然后出現(xiàn)一些自然的次數(shù)(也從2開(kāi)始)。如果存在匹配項(xiàng),則意味著可以找到兩個(gè)大于或等于2的數(shù)字的乘積,該兩個(gè)數(shù)字與n長(zhǎng)度的字符串匹配……意味著您有一個(gè)復(fù)合n。再次返回成功匹配的否定:n不是素?cái)?shù)。
如果找不到匹配項(xiàng),那么您將無(wú)法得出兩個(gè)大于或等于2的自然數(shù)的乘積...并且您同時(shí)具有不匹配項(xiàng)和素?cái)?shù),因此再次返回否定項(xiàng)比賽結(jié)果。
你現(xiàn)在看到了嗎?這真是令人難以置信的棘手(而且計(jì)算量很大?。且坏┇@得它,它同時(shí)也很簡(jiǎn)單。:-)
如果您還有其他問(wèn)題,例如正則表達(dá)式解析的實(shí)際工作方式,我可以詳細(xì)說(shuō)明。但是我現(xiàn)在試圖使這個(gè)答案簡(jiǎn)單(或盡可能簡(jiǎn)單)。

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
不錯(cuò)的正則表達(dá)式技巧(盡管效率很低)... :)
正則表達(dá)式對(duì)非素?cái)?shù)的定義如下:
當(dāng)且僅當(dāng)N <= 1或N被K> 1整除時(shí),N不是素?cái)?shù)。
與其傳遞N的簡(jiǎn)單數(shù)字表示形式到正則表達(dá)式引擎,不如給它提供長(zhǎng)度為 N 的序列,該序列由重復(fù)字符組成。析取的第一部分檢查N = 0或N = 1,第二部分使用后向引用尋找除數(shù)K> 1。它迫使正則表達(dá)式引擎找到一些可以重復(fù)至少兩次以形成序列的非空子序列。如果存在這樣的子序列,則意味著其長(zhǎng)度除以N,因此N不是素?cái)?shù)。
添加回答
舉報(bào)