使用正則表達式進行查找


在某些時候我們想要查找一個樣式的字符串,比如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個匹配串
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM