程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java系列筆記---正則表達式(2)

java系列筆記---正則表達式(2)

編輯:關於JAVA

java系列筆記---正則表達式(2)。本站提示廣大學習愛好者:(java系列筆記---正則表達式(2))文章只能為提供參考,不一定能成為您想要的結果。以下是java系列筆記---正則表達式(2)正文


正則表達式

      說真的正則表達式真不好寫,當我搜集材料預備開端寫的時分,發現搜集的東西越來越多范圍也越來越廣,我文章的前提就是文章要明晰,

在縷清自己思緒之後,我從先簡後難的方式來寫有關正表達式,你們假如覺得這篇寫的還可以的話,可以先關注我,接上去我會陸續更新。

  一.什麼是正則表達式

      正則表達式(regular expressions)是一種描繪字符串集的辦法,它是以字符串集中各字符串的共有特征為根據的。

正則表達式可以用於搜索、編輯或許是操作文本和數據。這是官方表達聽的有點繞口,用淺顯的話來說就是:正則表達式次要用來處置和文本有關的內容

罕見的處置方式有四種:1.婚配  2.切割   3.交換  4.獲取    在上面我也會逐個舉例闡明。

二.正則表達式罕見的符號含義

    這個我在正則表達式(1)中,有關常用的也大約做個引見,大家可以往前翻閱。

三.罕見的處置方式有四種

(1)婚配   我這裡運用的是字符串對象的辦法  match(String regex),

1 import java.util.regex.*;
2 public class TestException{
3       public static void main(String[] args) throws Exception {
4           String tel="18600000111";
5           String reg="1[3578]\\d{9}";  //首字母1,第二字母3,5,7,8,前面都是數字共有9位
6             boolean b1 =tel.matches(reg);
7         System.out.println(b1);//輸入後果true
8       }
9 }

 

(2)切割       我這裡運用的是字符串中的split辦法

案例一:切割一個或多個空格

 1 //切割一個或許多個空格
 2 import java.util.regex.*;
 3 public class TestException{
 4       public static void main(String[] args) throws Exception {
 5           String str ="aaa bbb  ccc ddd    eee";
 6           String [] arr =str.split(" +");//“ +”表示至多有一個空格
 7           for(String s:arr){
 8               System.out.print(s);
 9           }
10       }
11 }

運轉後果;

aaabbbcccdddeee

案例二:經過.來切割字符串

 1 //經過.來切割字符串
 2 import java.util.regex.*;
 3 public class TestException{
 4       public static void main(String[] args) {
 5           String str2="zhangsan.lisi.wangwu";
 6           /* \\是代表本義字符,假如你直接放split("."),是無法切割的,由於.在正則表達式中.有它特有的含義
 7              當你用本義之後\\.那麼它就只代表一個點,而不具有特殊意義*/
 8           String [] arr2 =str2.split("\\.");
 9           for(String s:arr2){
10               System.out.println(s);
11           }
12       }
13 }
14 /* 補充:在java中需求本義的除了.外,還有需求先本義不能直接切割的:
15  *     $  ( )  *  +  [ ]   ?    \  ^  { }  |  
16  *     這麼幾個大家用它來切割的時分,本義後就可以了
17  */

運轉後果:

zhangsan
lisi
wangwu

案例三:用反復項來切割

 1 //用反復項來切割
 2 import java.util.regex.*;
 3 public class TestException{
 4       public static void main(String[] args) {
 5           String str3 ="wer#######tayuio****asdfg";
 6           String reg ="(..)"; //(.)代表第一個恣意字符    \\1代表回去第一組數據  +代表1個或許多個      
 7           String [] arr3=str3.split(reg);
 8           for(String s:arr3){
 9               System.out.println(s);
10           }
11       }
12 }
13 /* 補充:我怕初學者對"(.)\\1+",還沒有搞懂,我這裡在獨自解釋一下:(.)的字符視為一個全體。 \\1代表回去第一組數據
14  * 那它其真實這裡也就代表(.),所以就相當於(.)(.)+,這裡僅僅是相當於,也是為了好了解,其實他們還是有實質區別的
15  * 由於(.)==\\1,就是說假如.代表a,那麼\\1也就代表a,而(.)≠(.),後面代表a前面可以代表b,由於前後兩個點不是同一個點
16  * 我也不知道這樣比擬能否恰當, 反正意思就是這個意思
17  */

運轉後果:

wer
tayuio
asdfg

(3)交換  運用String字符串匯總的辦法

案例一:把反復的數據 交換為#

 1 //把反復的數據 交換為#
 2 import java.util.regex.*;
 3 public class TestException{
 4       public static void main(String[] args) {
 5           String str="wer#####yw****fghj"; 
 6           //把反復的數據 交換為#    
 7           str=str.replaceAll("(.)\\1+", "#");//(.) 第一個恣意字符   \\1 取第一組數據   +  1個或許多個
 8           System.out.println(str) ; 
 9           }
10    }

運轉後果:

wer#yw#fghj

案列二:把反復項都變成單個

1 import java.util.regex.*;
2 public class TestException{
3       public static void main(String[] args) {
4           String str="wer#####yw****fg???hj"; 
5     //後一個參數的含義 可以經過$  數字援用第一個參數中的組,這個美元符號代表就是後面小括號裡的內容
6               str=str.replaceAll("(.)\\1+", "$1");
7               System.out.println(str); 
8           }
9    }

運轉後果:

wer#yw*fg?hj

案例三:電話號碼兩頭幾位用*表示

1 import java.util.regex.*;
2 public class TestException{
3       public static void main(String[] args) {
4           String str2="15889895644";//158****5644  
5           str2=str2.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
6           System.out.println(str2);// $1表示符號後面第一個小括號,$2代表第二個,假如有第三個小括號,那也可以$3; 
7           }
8    }

運轉後果:

158****5644

(4)獲取    字符串中沒有直接提供該功用 只能經過正則表達婚配

案例一:獲取正則表達式所婚配的字符串

 1 import java.util.regex.*;
 2 public class TestException{
 3       public static void main(String[] args) {
 4           String str="da jio zhu yi laa, ming tian  fang jia laa";
 5           //1.定義規則
 6           String reg="\\b[a-z]{3}\\b";//恣意三個字符 \\b 是單詞的邊界(明白為什麼加這個)
 7           Pattern p =Pattern.compile(reg);
 8           //3.經過正則表達對象 獲取婚配器對象   並把操作的字符串關聯
 9           Matcher m =p.matcher(str);
10           while(m.find()){  //find()用來搜索與正則表達式相婚配的任何目的字符串
11           System.out.println(m.start()+"....."+m.group()+"..."+m.end());
12           } //start()開端地位    group()用來前往包括了所婚配文本的字符串     end()完畢地位
13           }
14    }
15 /* 有關: 在regex(正則表達式)包中,包括了兩個類,Pattern(形式類)和Matcher(婚配器類)。
16  * 這個大家也可以多去理解
17  */

運轉後果:

3.....jio...6
7.....zhu...10
14.....laa...17
35.....jia...38
39.....laa...42

四:最後來一個綜合小案例

標題1:10.10.10.10   192.168.118.40  192.168.1.200  127.0.0.108   依照升序排序

 1 import java.util.Arrays;
 2 import java.util.regex.*;
 3 public class TestException{
 4       public static void main(String[] args) {
 5           String ip="10.10.10.10  192.168.118.40  192.168.1.200  127.0.0.108";
 6           /*
 7            * 為了方便   每一個端都補零 保證每一個字段至多是三位
 8            */
 9           ip=ip.replaceAll("(\\d+)", "00$1");//補0,讓至多有三位數
10           
11           ip=ip.replaceAll("0*(\\d{3})", "$1");//一切都變成三位數
12           
13           String [] ips =ip.split(" +");//用空格來切割
14           Arrays.sort(ips);//升序排序          
15           for(String x:ips){
16               System.out.println(x.replaceAll("0*(\\d+)", "$1"));//復原
17           }
18    }
19 }
20 /** 這個標題或許看著不難,難就難在思想形式,它這每一步都很關鍵,也是希望大家在學習的途中多考慮,而不是停留在看的根底上
21  */

運轉後果:

10.10.10.10
127.0.0.108
192.168.1.200
192.168.118.40

這篇文章到這裡完畢了,接上去關於正則表達式我還會再寫,比方Pattern(形式類)和Matcher(婚配器類),再比方如何獲取文本中的電話號碼等等深化的一些東西,不過最近應該不寫了,

接上去我會寫一些其它有關的知識。

大家看完也歡送做出點評,哪裡寫的不周到或許還可以更好的也歡送提出,我會立刻更正,謝謝!

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved