posts - 8,  comments - 6,  trackbacks - 0

          2.3  在一個String中查找子串模式

          本章前面的“使用正則表達(dá)式來搜索文本”一節(jié)說明了如何使用regex模式來比較一個String是否匹配(或部分匹配)一個給定的模式。這里,匹配是從輸入字符串的第一個字符開始的。在本節(jié)中,將使用regex模式在一個String中查找多個匹配值。舉例來說,可以在一篇文檔中搜索查找嵌入在正文中的任何URL。首先,需要創(chuàng)建一個匹配URL的模式字符串。下面給出一個能匹配大多數(shù)URL的模式:

          String urlString = "(http|https|ftp)://[/\\w\\.\\-\\+\\?%=&;:,#]+";

          此模式并不能有效地描述URL,因為它也匹配一些包含錯誤語法的URL字符串,如http://////////。在一些情況下它也會捕獲額外的字符,如可能緊跟在嵌入到正文中的URL之后的逗號或分號。這些字符有時會出現(xiàn)在URL中,但是如果URL出現(xiàn)在正文中,這些字符可能不希望URL的一部分而被捕獲。但該模式相對簡短并且能夠很好地用于搜索文本文件中包含的URL。此模式表達(dá)式的各部分如下所示:

          ●  http、https或ftp 
          ●  ://
          ● / 0-9 A-Z a-z _ . - + ? % = & ; : , #中的一個或多個字符
          我們知道,Matcher可以將一個模式應(yīng)用到一個特殊的輸入字符串。為了使用前面定義的urlString模式查找多個子串匹配,必須調(diào)用Matcher的find方法。為了在輸入字符串內(nèi)找到每一個出現(xiàn)的模式,可以重復(fù)調(diào)用find方法來查找下一個匹配。當(dāng)沒有更多的匹配時,find方法返回false。為了獲取當(dāng)前匹配的位置,可以使用start和end方法來獲得索引值以在輸入文本中的范圍內(nèi)進(jìn)行匹配。以下的代碼將顯示數(shù)據(jù)內(nèi)找到的所有URL:

          String urlString = "(http|https|ftp)://[/\\w\\.\\-\\+\\?%=&;:,#]+";
          Pattern urlPattern = Pattern.compile(urlString);
          // get the data (somehow)
          String data = getStringData();
          // get a matcher for the data
          Matcher urlMatcher = urlPattern.matcher(data);
          // iterate through the matches
          while (urlMatcher.find()) {
          int startIndex = urlMatcher.start();   // index of start
          int endIndex = urlMatcher.end();        // index of end + 1
          // retrieve the matching substring
          String currentMatch = data.substring(startIndex, endIndex);
          System.out.println(currentMatch);
          }

          此代碼將不能匹配相對的URL(如/images/picture.jpg),這些URL常常出現(xiàn)在HTML文件或省略前置http://的不完整的URL(如wickedcooljava.com)中。為了知道何時應(yīng)該將某字符串作為相對URL來對待,程序必須理解HTML文件的結(jié)構(gòu)(使用regex也可完成此任務(wù),但是要更困難些)。需要知道每個匹配的上下文,為此必須在理解其語法的基礎(chǔ)上分析文件。若想了解更多的信息,請參考第3章。

          posted on 2008-12-09 09:29 ♂游泳的魚 閱讀(446) 評論(1)  編輯  收藏

          FeedBack:
          # re: 2.3 在一個String中查找子串模式
          2014-12-09 15:03 | 獵頭招聘
          在一個String中查找子串模式看了好幾篇還是不太懂,看來要回去看第三章。  回復(fù)  更多評論
            

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


          網(wǎng)站導(dǎo)航:
           

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 卢氏县| 山西省| 万山特区| 溧阳市| 正宁县| 靖江市| 衡南县| 沁源县| 平原县| 红原县| 靖州| 满城县| 图木舒克市| 连州市| 郴州市| 遂昌县| 盱眙县| 澜沧| 通江县| 寻乌县| 乐东| 阳东县| 宁武县| 翁源县| 酉阳| 微山县| 财经| 四平市| 远安县| 英吉沙县| 新建县| 金阳县| 新竹县| 七台河市| 新邵县| 阳春市| 临武县| 贵港市| 乐昌市| 上思县| 津市市|