奇领yy6608在线观看官网

  • <acronym id="y46sa"></acronym>
  • <kbd id="y46sa"></kbd>
  • 空間訪問權限:游客, 頭像訪問權限:自己
    [登錄]后可以瀏覽更多信息
    博客正文
    【操作】
    正則表達式匹配順序問題

    一、循環匹配問題

         有一個多項式a+b-d+e-f……需要用正則分離其各項和運算符(撇開explode或split不談)。不難發現,該多項式由n項及(n-1)個運算符構成,很自然地,可以把多項式看成:

    首項   +  (n-1) 個 (運算符 + 通配項)

     (n-1) 個 (通配項 + 運算符) + 末尾項

    正則寫成懶惰匹配模式然后進行全局搜索,即

     /^[a-z](([\+\-])([a-z]))+?/g

    /(([a-z])([\+\-]))+?[a-z]$/g
     

    本人的匹配思路是

    自以為是的匹配流程.jpg

    想當然的匹配模式

         然而事與愿違,得到的卻得不到正確結果。經過進一步研究,正則引擎運行時在/g開啟的情況下,優先要匹配的是整個表達式是否成立,成立后再搜索第2、第3……個結果,循環搜索直到完畢。而不是把整個表達式分成若干塊。然后循環搜索局部快,實際的匹配流程是。

    實際的匹配模式.jpg

    實際的匹配模式


    顯而易見我們得不到想要的結果,即使去掉搜索開始符^和結尾符號$也不成。既然了解了正則引擎的循環匹配模式,我們就可以把匹配流程改為

    修改后的匹配模式.jpg


    于是正則表達式寫為:

    /(?:([\+\-])?([a-z]+))+?/

    在php和js下運行,達到預期的結果

    phpcode.jpg
    phpresult.jpg

    Js代碼:

    var s=new String('ab+cb-d+e-f');
    var m=s.match(/(?:([\+\-])?([a-z]+))+?/g);
    alert(m);

    jsresult.jpg

    二、|或者問題

       括號里的|表示或者,比如 (a|e|k)表示匹配a、e或者k,并捕獲匹配,實際上(|)是有匹配優先級的,即左邊的先滿足,右邊的后滿足,發現此問題源于本人解析一個計算公式,比如:

    總分=語文+數學-45.5/0.5+英語+科學+社會/2

    本人的意圖是:先把公式分解為“總分”和一個多項式“語文+數學-45.5/0.5+英語+科學+社會/2”,然后進一步把多項式分解為若干單項式:

    • 語文
    • +數學
    • -45.5/0.5
    • +英語
    • +科學
    • +社會/2

    接下來補齊單項式的符號位,最后把統一個格式的單項式分解為: 符號位、字段或常數、 乘除號*/、常數。即:

    • +   語文   *  1
    • +   數學   *  1
    • -   45.5   /  0.5
    • +   英語   *  1
    • +   科學   *  1
    • +   社會   /  2

    用到的正則為

    /([\+\-])([0-9a-zA-Z\u4E00-\u9FA5]+|\d+(?:\.\d+)?)(?:([\/\*])(\d+(?:\.\d+)?))?/

    其中第2個捕獲匹配

    ([0-9a-zA-Z\u4E00-\u9FA5]+|\d+(?:\.\d+)?)

    用到了(|)運算符。[0-9a-zA-Z\u4E00-\u9FA5]+ 表示貪婪匹配數字字母和漢字,比如:English、語文、科目2、科目A等;\d+(?:\.\d+)? 表示匹配整數或小數。上述正則在分離常數項

    -45.5 / 0.5

    得到的結果為:“-45”,直接舍棄了小數點后面的字符“.5/0.5”, 猜測是正則[0-9a-zA-Z\u4E00-\u9FA5]+放到了括號的最左邊,優先級最高,匹配到-45后就終止了匹配。稍作修改得到了正確結果,說明猜測正確。修改后的正則為:

    (\d+(?:\.\d+)?|[0-9a-zA-Z\u4E00-\u9FA5]+)

    運行結果為:

    正確的匹配結果.jpg


    欄目劃分
    WEB應用程序 (33)
    桌面應用程序 (10)
    Windows操作系統 (12)
    xNix操作系統 (5)
    數據庫技術 (3)
    多媒體技術 (1)
    硬件技術 (4)
    辦公軟件 (2)
    以史為鑒 (2)
    教學反思1 (2)
    奇聞趣事 (5)
    其它 (11)
    教學反思 (4)
    電子技術 (2)
    中學生科技 (3)
     
    主人推薦
    音象定位和音箱喇叭的排步
    我國高層意向已定:制造大飛機
    “運十”悲劇
    日爾曼人
    細說百越族
    宇宙深處的秘密——星云
    [強烈推薦]中華56民族FLASH完整珍藏版
    一組漂亮的植物
      
    奇领yy6608在线观看
    友情链接:dafa888手机典版网页登录 白小姐四肖必选期期中