1. 程式人生 > >使用正則表達式進行查找

使用正則表達式進行查找

小寫 字符 使用 實現 string container ets 深度 沒有

在某些時候我們想要查找一個樣式的字符串,比如email,姓名,某些產品的編號。一般暴力的方法是你吧所有可能的形式都存一下,然後再對每個串一一匹配。但是往往滿足要求的數據太過於海量讓我們無法應對。但是已經有強者完成了我們想法。創造出來了這麽個東西。這是java上

本文是非常簡單的講解,毫無深度。

正則表達式的元字符(使用百度百科的表格)先看下面有根據需要看表

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

但是我們平常實際上用的不是太多。我們來了解基本的幾個

方法:

[ ]表示或比如我們把幾個元字符加入其中[A-Za-z0-9-_]就表示大寫字母或者小寫字母、或者0-9數字,或者-,或者_(不一定要上表元字符,你自己其他的單個字符也沒有問題)

[^]表示匹配的位置是不是方括號裏面的東西

( )這是一個圓括號將裏面包含的滿足匹配的數都放入group,我們再講group中滿足要求的數字取出來即可

量:

*表示前一個字符出現0次或多次

+表示前一個字符出現1次或多次

?表示前一個字符出現0次或一次。加在其他量面前表示非貪婪模式何為貪婪模式見上表

{n}表示前一個字符恰出現n次

{n,}表示前一個字符出現次數大於n次

{n,m}表示前一個字符出現n-m次

同時使用時我們要依靠兩個類

Patten和Matcher

看一下

Matcher類

compact1,compact2,compact3 java.util.regex中

類匹配器

  • java.lang.Object繼承
    • java.util.regex.Matcher中
  • 所有已實現的接口:
    的MatchResult
    方法

技術分享圖片

技術分享圖片

那麽我們看一看實際應用吧

String regex="[^A-Za-z0-9_-]@([A-Za-z0-9_-]*)";//這是我們的正則表達式目的是獲取@後的人名。本問題中@生效的條件是@是非數字,非字母,非下劃線,非分隔符。名字是字母數字下劃線字母,*表示多個
Pattern p=Pattern.compile(regex);//這裏相當於解析正則表達式
for(int i = 0; i < tweets.size();i++)

{
  Matcher m=p.matcher(tweets.get(i).getText());//這裏匹配我們的內容tweets.get(i).getText()是String類型的一段文字
  while(m.find()){                      //在有匹配的情況下
  for(int j = 1;j < m.groupCount()+1;j++)            //所有匹配數
  {
    nameList.add(m.group(j).toLowerCase());//return the String with lowercase//得到所有的匹配數m.group(j)得到第j個匹配串
  }
}

使用正則表達式進行查找