站長資訊網
        最全最豐富的資訊網站

        正則表達式與數學(方程式、線性方程)

        正則表達式如下:

        復制代碼 代碼如下:
        ^1?$|^(11+?)1+$ 可以判斷素數(換成n個1的形式,n為數字的大小。比如5轉換為11111;3轉換為111;2轉換為11。)

        什么是素數?
        初中學的吧。我們老師當初教我們的是“質數”。看下概念:
        質數又稱素數。指在一個大于1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數。
        換句話說,只有兩個正因數(1和自己)的自然數即為素數。比1大但不是素數的數稱為合數。1和0既非素數也非合數。
        這個正則表達式是什么意思?
        【^1?$|^(11+?)1+$】中間用【|】分開。【|】在正則語法里,表示“或”,作用于其前后兩個單元。(還是不明白的看下面,明白的跳過下面這段)

        復制代碼 代碼如下:
        比如【ab|cd】可以匹配“ab”、也可以匹配“cd”,意思是除了“ab”就是“bc”,如果想匹配“abd”、“acd”那【|】的作用域得改下,加個范圍
        改成【a(b|c)】(匹配結果分配組)或者【a(?:b|c)d】(匹配結果不分配組,更高效率)。

        繼續剛剛的正則,分為兩個分支,其一為【^1?$】和【^(11+?)1+$】。其中【^】脫字符在正則語法中,除了在中括號【[]】中都是代表開頭的意思,在中括號中的表示非。
        第一個分支【^1?$】匹配的是“1”或者“”(空字符串)。
        第二個分支【^(11+?)1+$】,先看下括號內的【(11+?)】匹配的是字符“1”后面接著【1+】就是1到無數個1。后面的【?】問號表示非貪婪,就是盡量少的匹配。
        接著往后看【1+】中,【1】表示引用已匹配的第一個組的結果。也就是第一個【()】括號匹配的結果。同理【2】就是第二個括號捕獲的結果。(小提示:上面提到的【(?:)寫法就是不分配組,這樣引用的話,就引用不到了】)
        【+】就是1到無數個了。這個表達式我們可以這么看。【(11+?)】看成數學中的1+n,其中n為大于0的正整數。外面的【1+】也就是引用前面這個組的次數。理解成m倍,其中m為大于0的正整數。
        那整個表達式就是(1+n)*m。因為n、m都大于0,那么1+n肯定大于1,最小為2,最大為無窮大;m最小為1,最大為無窮大。
        那么,一個大于2的正整數的任何大于零的倍數永遠都是合數,也就是非素數。
        再回過頭來看看這個表達式。匹配的分別為0個或1個字符串“1”,也就是數字0,數字1。和其他所有合數。整個表達式,如果成功匹配就是非素數,如果不匹配就是質數。這就是對的了。

        復制代碼 代碼如下:
        if (preg_match(‘/^1?$|^(11+?)1+$/i’, $subject)) {
        #不是素數
        } else {
        # 是素數
        }

        小提示:此鑒定是否為素數方法僅研究學習用,不能用到正式程序中,字符串過長,會造成非常恐懼大的回溯。
        英文博客地址:http://blog.stevenlevithan.com/archives/algebra-with-regexes
        在上面的博文中,有提到兩個方程式與正則表達式,我們一起來研究下。
        •二元方程17x + 12y = 51,其表達式【^(.*)1{16}(.*)2{11}$】。很好理解。【(.*)】也就是0到無數個【.】點號。(這里是接著上文說的,其實,【.】點號想表示的是字符“1”)
        也就是0到無數個1,后面【1】引用一次。后面【{16}】就是16次。作用于前面的【1】,也就是16次引用。加上開始的【(.*)】一共正好17次。后面一個就不說了,跟這個一樣。
        正則引擎會依次嘗試【(.*)】中0到無數個字符“1”,0個字符“1”,1個字符“1”,2個字符“1”一直增加的嘗試。直到成功,否則要嘗試完所有字符“1”的最大個數(這里是51個字符“1”)。
        •二、三元方程式11x + 2y + 5z = 115,其表達式為【^(.*)1{10}(.*)2{1}(.*)3{4}$】,理解就跟上面那個一樣。注意【2】、【3】值得是第2,第3個括號捕獲的內容,別看花眼了。
        ――――――-分割線――――――
        上面幾個有意思的數學題都是將整數轉換為對應個數的字符“1”。下面這個,是轉換為二進制數的。
        先吃飯,以后再寫。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 无码人妻精品一区二区蜜桃百度 | 无码欧精品亚洲日韩一区| 99久久精品国产高清一区二区| 四库影院永久四虎精品国产| 先锋影音国产精品| 国产精品网站在线观看免费传媒| 合区精品久久久中文字幕一区| 国产69精品久久久久99尤物 | 无码国内精品久久人妻蜜桃| 精品国产成人在线| 99久久精品免费看国产一区二区三区| 国产精品久久久久9999高清| 经典国产乱子伦精品视频| 亚洲韩国精品无码一区二区三区| 精品欧洲av无码一区二区| 欧美日韩国产精品| 国産精品久久久久久久| 午夜精品视频在线| 欧美成人精品一级高清片| 久久精品这里只有精99品| Aⅴ精品无码无卡在线观看| 精品一区二区三区四区| …久久精品99久久香蕉国产| 青青草原精品国产亚洲av| 亚洲av午夜福利精品一区人妖| 亚洲精品成a人在线观看| 久久久亚洲精品蜜桃臀| 精品国产国产综合精品| 国产一区二区精品久久凹凸 | 国产精品一区二区久久不卡| 久久九九精品99国产精品| 欧美性videos高清精品| 午夜精品久久久久久99热| 亚洲精品制服丝袜四区| 亚洲国产精品无码久久久不卡 | 国产AV国片精品一区二区| 2021国产三级精品三级在专区| 久久er国产精品免费观看2| 老司机99精品99| 99热都是精品久久久久久| 国产精品亚洲专区无码WEB|