<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如鵬網 大學生計算機學習社區

    CowNew開源團隊

    http://www.cownew.com 郵件請聯系 about521 at 163.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks
    作者楊中科是CowNew開源團隊JDBMonitor項目組的開發人員。
    CowNew開源團隊網站 http://www.cownew.com
    論壇 http://www.cownew.com/newpeng/
    轉載請注明此版權信息

    正則表達式是一個非常強大的工具,有了這個工具,在進行字符串的解析、修改等不會再麻煩,比寫一堆if else語句更清晰易懂。
    關于正則表達式的基礎知識我這里不再多講,大家可以到網上查找相關的資料。本文假定您已經熟悉正則表達式的基本使用。
    讓我們以最好用的數據庫監控、日志工具JDBMonitor為例來講解。JDBMonitor的二進制jar包和源代碼都可以從 http://www.cownew.com 下載得到。
    DataBaseDBListener要讀取形如"dburl=jdbc:odbc:MQIS;user=sa;password=sa;logtable=T_Log_Log"的配置字符串,然后從中解析數據庫連接配置、表名等信息,并且user=sa;password和logtable部分也是可以忽略的(這是當然的,因為有的數據庫不需要用戶名密碼,而且logtable也有默認值)。
    打開com.cownew.JDBMonitor.listenerImpl.DataBaseDBListener,init就是進行參數arg的解析的:
    1、Pattern patAll = Pattern.compile("dburl=(.+?);?(user=.*;password=.*;)?(logtable=.+)?");
    這句是從arg中提取三個部分,分別是dburl部分,用戶名密碼部分,logtable部分。因為用戶名密碼部分,logtable部分是可以忽略的,因此采用"?"來標識這個兩個分組“(user=.*;password=.*;)?”、“(logtable=.+)?”。而一旦dburl部分,用戶名密碼部分忽略,那么dburl=...后的;也是可以忽略的,因此";?"。
    值得我們注意的是“dburl=(.+?)”,為什么不是"dburl=(.+)"呢?怎么多了個?。你可以嘗試去掉“?”后,再次運行。你會看到dburl=后所有的字符,包括用戶名密碼部分,logtable部分都被看成dburl=的值了,也就是后邊的字符都被吃掉了。為什么呢?
    這就要提到正則表達式的貪婪性和懶惰性,關于貪婪性和懶惰性可以查看網上一篇文章《深入淺出之正則表達式》(http://dragon.cnblogs.com/archive/2006/05/08/394078.html)。
    象《深入淺出之正則表達式》描述的那樣:“+”是貪婪的。也就是說,“+”會導致正則表達式引擎試圖盡可能的重復前導字符。只有當這種重復會引起整個正則表達式匹配失敗的情況下,引擎會進行回溯。也就是說,它會放棄最后一次的“重復”,然后處理正則表達式余下的部分。一個用于修正以上問題的可能方案是用“+”的惰性代替貪婪性。你可以在“+”后面緊跟一個問號“?”來達到這一點。“*”,“{}”和“?”表示的重復也可以用這個方案。
    因此JDBMonitor就采用了dburl=(.+?)來解決這個貪婪性問題。
    2、Pattern patUserPwd = Pattern.compile("user=(.*);password=(.*);");
    在第一步中把“user=sa;password=sa;”當成一個整體來提取,那么我們接下來還要從這個提取中的串中提取用戶名user、密碼password信息。因此采用這種方式來提取。這種分步提取的方式比寫復雜的正則表達式一次性提取看起來更清晰,更加易維護。

    posted on 2006-06-02 23:43 CowNew開源團隊 閱讀(913) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产精品无码久久九九大片| 免费a级黄色毛片| 亚洲精品91在线| 免费A级毛片无码A∨中文字幕下载| 亚洲女同成人AⅤ人片在线观看| 精品亚洲成a人在线观看| 四虎永久免费地址在线观看| 老司机午夜精品视频在线观看免费| 国产成人高清精品免费软件| 美女一级毛片免费观看| 亚洲精品国产自在久久| 国产特黄特色的大片观看免费视频| 91麻豆国产自产在线观看亚洲| 国产乱妇高清无乱码免费| 亚洲精品乱码久久久久久中文字幕 | www.999精品视频观看免费| 亚洲日韩中文字幕天堂不卡| 免费无码肉片在线观看| 婷婷亚洲综合五月天小说在线| 亚洲人AV永久一区二区三区久久| 国产人成网在线播放VA免费| 亚洲国产精品婷婷久久| www.免费在线观看| 亚洲色www永久网站| 免费a级毛片18以上观看精品| 国产黄在线播放免费观看| 亚洲AV乱码一区二区三区林ゆな| 2021国内精品久久久久精免费| 亚洲中文字幕无码久久2020| 午夜国产羞羞视频免费网站| 免费无码作爱视频| 香蕉大伊亚洲人在线观看| 可以免费观看的一级毛片| 九九精品成人免费国产片| 亚洲乱码中文字幕小综合| 午夜国产羞羞视频免费网站| 久久99免费视频| 亚洲av永久无码精品秋霞电影秋| 中文字幕一精品亚洲无线一区| 日本妇人成熟免费中文字幕| 人禽伦免费交视频播放|