1. 程式人生 > >JAVA中正則表示式總結

JAVA中正則表示式總結

下表顯示了正則表示式的語法:

表 1.1 正則表示式語法
元字元 說明
. 匹配任何單個字元。例如正則表示式“b.g”能匹配如下字串:“big”、“bug”、“b g”,但是不匹配“buug”。 
$ 匹配行結束符。例如正則表示式“EJB$能夠匹配字串“I like EJB”的末尾,但是不能匹配字串“J2EE Without EJBs!”。 
^ 匹配一行的開始。例如正則表示式“^Spring”能夠匹配字串“Spring is a J2EE framework”的開始,但是不能匹配“I use Spring in my project”。
* 匹配0至多個在它之前的字元。例如正則表示式“
zo*”能匹配z以及zoo”;正則表示式“.*”意味著能夠匹配任意字串。
/ 轉義符,用來將元字元當作普通的字元來進行匹配。例如正則表示式/$被用來匹配美元符號,而不是行尾;正則表示式/.用來匹配點字元,而不是任何字元的萬用字元。
[] 匹配括號中的任何一個字元。例如正則表示式“b[aui]g”匹配bugbigbug,但是不匹配beg。可以在括號中使用連字元“-”來指定字元的區間來簡化表示,例如正則表示式[0-9]可以匹配任何數字字元,這樣正則表示式“a[]c”就可以匹配“a0c”、“a1c”、“a2c”等字串;還可以制定多個區間,例如“[A-Za-z]”可以匹配任何大小寫字母。還有一個相配合使用的元字元“
^”,用在這裡並不像前邊的那個“^”一樣表示匹配行開始,而是表示排除,要想匹配除了指定區間之外的字元,就可以在左邊的括號和第一個字元之間使用^字元,例如“[^163A-Z]”將能偶匹配除了163和所有大寫字母之外的任何字元。
( )  () 之間括起來的表示式定義為”(group),並且將匹配這個表示式的字元儲存到一個臨時區域,這個元字元在字串提取的時候非常有用。
| 將兩個匹配條件進行邏輯運算。'z|food' 能匹配 "z"  "food"'(z|f)ood' 則匹配"zood"  "food"
+ 匹配前面的子表示式一次或多次。例如正則表示式9+匹配
999999等。
? 匹配前面的子表示式零次或一次。例如,"do(es)?" 可以匹配 "do"  "does" 中的"do" 。此元字元還有另外一個用途,就是表示非貪婪模式匹配,後邊將有介紹
{n} 匹配確定的 n 次。例如,“e{2}不能匹配“bed”中的“d”,但是能匹配“seed”中的兩個“e”。
{n,} 至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配seeeeeeeed”中的所有“e”。
{n,m} 最少匹配 n 次且最多匹配 m 次。“e{1,3}”將匹配“seeeeeeeed”中的前三個“e”。

    假設我們要在文字檔案中搜索美國的社會安全號碼。這個號碼的格式是999-99-9999。用來匹配它的正則表示式如圖一所示。在正則表示式中,連字元(“-”)有著特殊的意義,它表示一個範圍,比如從0到9。因此,匹配社會安全號碼中的連字元號時,它的前面要加上一個轉義字元“/”。

      假設進行搜尋的時候,你希望連字元號可以出現,也可以不出現——即,999-99-9999和999999999都屬於正確的格式。這時,你可以在連字元號後面加上“?”數量限定符號。

      美國汽車牌照的一種格式是四個數字加上二個字母。它的正則表示式前面是數字部分“[0-9]{4}”,再加上字母部分“[A-Z]{2}”。

1.5 “否”符號

      “^”符號稱為“否”符號。如果用在方括號內,“^”表示不想要匹配的字元。例如,圖四的正則表示式匹配所有單詞,但以“X”字母開頭的單詞除外。

1.6 圓括號和空白符號

     “/s”符號是空白符號,匹配所有的空白字元,包括Tab字元。如果字串正確匹配,接下來如何提取出月份部分呢?只需在月份周圍加上一個圓括號建立一個組,然後用ORO API提取出它的值。

1.7 其它符號

     為簡便起見,你可以使用一些為常見正則表示式建立的快捷符號。如以下所示:

/t:製表符,等同於/u0009 /n:換行符,等同於/u000A /d:代表一個數字,等同於[0-9] /D:代表非數字,等同於[^0-9] /s:代表換行符、Tab製表符等空白字元 /S:代表非空白字元 /w:字母字元,等同於[a-zA-Z_0-9] /W:非字母字元,等同於[^/w] 例如,在前面社會安全號碼的例子中,所有出現“[0-9]”的地方我們都可以使用“/d”。 以下是我整理出來的程式:供參考:
  1. package org.luosijin.test;  
  2. import java.util.regex.Matcher;  
  3. import java.util.regex.Pattern;  
  4. /** 
  5.  * 正則表示式 
  6.  * @version V5.0 
  7.  * @author 羅嗣金 
  8.  * @date   2009-11-9 
  9.  */
  10. publicclass Regex {  
  11.     /** 
  12.      * @param args 
  13.      * @author 羅嗣金 
  14.      * @date 2009-11-9 下午11:27:28 
  15.      */
  16.     publicstaticvoid main(String[] args) {  
  17.         Pattern pattern = Pattern.compile("b*g");  
  18.         Matcher matcher = pattern.matcher("bbg");  
  19.         System.out.println(matcher.matches());  
  20.         System.out.println(pattern.matches("b*g","bbg"));  
  21.         //驗證郵政編碼
  22.         System.out.println(pattern.matches("[0-9]{6}""200038"));  
  23.         System.out.println(pattern.matches("//d{6}""200038"));  
  24.         //驗證電話號碼
  25.         System.out.println(pattern.matches("[0-9]{3,4}//-?[0-9]+""02178989799"));  
  26.         getDate("Nov 10,2009");  
  27.         charReplace();  
  28.         //驗證身份證:判斷一個字串是不是身份證號碼,即是否是15或18位數字。
  29.         System.out.println(pattern.matches("^//d{15}|//d{18}$""123456789009876"));  
  30.         getString("D:/dir1/test.txt");  
  31.         getChinese("welcome to china,江西奉新,welcome,你!");  
  32.         validateEmail("[email protected]");  
  33.     }  
  34.     /** 
  35.      * 日期提取:提取出月份來 
  36.      * @param str 
  37.      * @author 羅嗣金 
  38.      * @date 2009-11-9 下午11:56:06 
  39.      */
  40.     publicstaticvoid getDate(String str){  
  41.         String regEx="([a-zA-Z]+)|//s+[0-9]{1,2},//s*[0-9]{4}";  
  42.         Pattern pattern = Pattern.compile(regEx);  
  43.         Matcher matcher = pattern.matcher(str);  
  44.         if(!matcher.find()){  
  45.             System.out.println("日期格式錯誤!");  
  46.             return;  
  47.         }  
  48.         System.out.println(matcher.group(1));   //分組的索引值是從1開始的,所以取第一個分組的方法是m.group(1)而不是m.group(0)。
  49.     }  
  50.     /** 
  51.      * 字元替換:本例項為將一個字串中所有包含一個或多個連續的“a”的地方都替換成“A”。 
  52.      *  
  53.      * @author 羅嗣金 
  54.      * @date 2009-11-10 上午12:06:03 
  55.      */
  56.     publicstaticvoid charReplace(){  
  57.         String regex = "a+";  
  58.         Pattern pattern = Pattern.compile(regex);  
  59.         Matcher matcher = pattern.matcher("okaaaa LetmeAseeaaa aa booa");  
  60.         String s = matcher.replaceAll("A");  
  61.         System.out.println(s);  
  62.     }  
  63.     /** 
  64.      * 字串提取 
  65.      * @param str 
  66.      * @author 羅嗣金 
  67.      * @date 2009-11-10 上午12:20:48 
  68.      */
  69.     publicstaticvoid getString(String str){  
  70.         String regex = ".+/(.+)$";  
  71.         Pattern pattern = Pattern.compile(regex);  
  72.         Matcher matcher = pattern.matcher(str);  
  73.         if(!matcher.find()){  
  74.             System.out.println("檔案路徑格式不正確!");  
  75.             return;  
  76.         }  
  77.         System.out.println(matcher.group(1));  
  78.     }  
  79.     /** 
  80.      * 中文提取 
  81.      * @param str 
  82.      * @author 羅嗣金 
  83.      * @date 2009-11-10 上午12:27:17 
  84.      */
  85.     publicstaticvoid getChinese(String str){  
  86.         String regex = "[//u4E00-//u9FFF]+";//[//u4E00-//u9FFF]為漢字   
  87.         Pattern pattern = Pattern.compile(regex);  
  88.         Matcher matcher = pattern.matcher(str);  
  89.         StringBuffer sb = new StringBuffer();  
  90.         while(matcher.find()){  
  91.             sb.append(matcher.group());  
  92.         }  
  93.         System.out.println(sb);  
  94.     }  
  95.     /** 
  96.      * 驗證Email 
  97.      * @param email 
  98.      * @author 羅嗣金 
  99.      * @date 2009-11-10 上午12:34:50 
  100.      */
  101.     publicstaticvoid validateEmail(String email){  
  102.         String regex = "[0-9a-zA-Z][email protected][0-9a-zA-Z]+//.[0-9a-zA-Z]+";  
  103.         Pattern pattern = Pattern.compile(regex);  
  104.         Matcher matcher = pattern.matcher(email);  
  105.         if(matcher.matches()){  
  106.             System.out.println("這是合法的Email");  
  107.         }else{  
  108.             System.out.println("這是非法的Email");  
  109.         }  
  110.     }  
  111. }  

相關推薦

JAVA表示式總結

下表顯示了正則表示式的語法: 表 1.1 正則表示式語法 元字元 說明 . 匹配任何單個字元。例如正則表示式“b.g”能匹配如下字串:“big”、“bug”、“b g”,但是不匹配“buug”。  $ 匹配行結束符。例如正則表示式“EJB$”能夠匹配字串“I like EJB”的末尾,但是不

java表示式的瞭解與實踐記錄

Pattern pattern = Pattern.compile("^\\S+/q/"); Matcher matcher = pattern.matcher(resultString); String qrcode=""; while(matcher.find()){ String path

Java表示式相關類Pattern和Matcher的使用

在Java中,java.util.regex包定義了正則表示式使用到的相關類,其中最主要的兩個類為:Pattern、Matcher:   Pattern 編譯正則表示式後建立一個匹配模式;   Matcher 使用Pattern例項提供的正則表示式對目標字串進行匹

Java 表示式

字元類: [abc] a、b 或 c [^abc] 任何字元,除了abc [a-zA-Z] a 到 z 或 A 到 Z ,兩頭的字母包括在內 [0-9] 0到9 的字元都包括 預定義字元類: . 任何字元 \d 數字:[0-9] 示例:判斷手機號的規則: String regex = “

1000行程式碼徒手寫表示式引擎【1】--JAVA表示式的使用

簡介: 本文是系列部落格的第一篇,主要講解和分析正則表示式規則以及JAVA中原生正則表示式引擎的使用。在後續的文章中會涉及基於NFA的正則表示式引擎內部的工作原理,並在此基礎上用1000行左右的JAVA程式碼,實現一個支援常用功能的正則表示式引擎。它支援貪婪匹配和懶惰匹配;支援零寬度字元(如“\b”, “\B

Java表示式匹配的語法規則

, package com.fsti.icop.util.regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class RegExpValidatorUt

java表示式驗證日期

/** *正則表示式驗證日期格式     包括潤二月 **/ // public static void main(String[] args) { //  Pattern p = Pattern //      .compile("^((\\d{2}(([02468][

JAVA表示式的二次轉義

需求:格式化金額,替換伺服器返回的格式化字串中的”{0}”為金額 public class Test { public static void main(String[] args) { String unformattedMoney

Java表示式去除html標籤

    注:這是Java正則表示式去除html標籤方法。     private static final String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; // 定義sc

java表示式工具類:Pattern和Macher

原地址 java.util.regex是一個用正則表示式所訂製的模式來對字串進行匹配工作的類庫包。 1.簡介: java.util.regex是一個用正則表示式所訂製的模式來對字串進行匹配工作的類庫包。 它包括兩個類:Pattern和Matcher

java表示式運用例項(用String類的matches方法演示)

java中正則表示式運用例項(參看java中正則表示式運用詳解): 測試程式碼  package test;   /**    * 在String的matches()方法,split()方法中使用正則表示式.    * @author fhd001    */   pu

Java表示式的分割案例

import java.util.Scanner; public class SplitDemo {/**正則表示式的分割案例:*  在鍵盤錄入一個年齡,判斷是不是按照你要求的年齡段。* @param args*/public static void main(String

Java表示式常用方法彙總

眾所周知,在程式開發中,難免會遇到需要匹配、查詢、替換、判斷字串的情況發生,而這些情況有時又比較複雜,如果用純編碼方式解決,往往會浪費程式設計師的時間及精力。因此,學習及使用正則表示式,便成了解決這一矛盾的主要手段。 大 家都知道,正則表示式是一種可以用於模式匹配和替換的規

JAVA表達式學習總結

等價 regex 5.1 表示 最好 方法 system lin 劃線 一、JAVA中正則表達式相關的類 1. java.util.regex.Pattern   該類用於編譯模式,模式可以理解為一個正則表達式,比如:a*b。   用法如下:   // 創

java使用表示式從一長串字元獲取一段特徵字串

只能說String工具類太強大,導致一直以來,幾乎沒怎麼用到過正則表示式,現在突然要用到,參考正則表示式語法,摸索一上午才搞出來。記錄分享一下,以免忘記 從一長串字元中,截取出邀請碼,我想很多人都遇到過。 String s = "邀請您加入隨心購,自動搜尋淘寶天貓優惠券!先領券,再購

java利用表示式提取字串的整數和小數部分

最近開發遇到一個新的東西,就是前端傳過來一個字串,需要將裡面的數字提取出來,倒騰了一天,最後還是沒有倒騰出來,最後還是借鑑大佬的方法。記錄一下。 首先是前端傳來的字串“小明通過掃碼向你付款100000.566元”其中暱稱和金額不是固定的,其他是固定的。 於是便考慮使用“通過掃碼向你付

java 利用表示式去處字串的所有空格

轉載自xcmercy的部落格 目標 去除字串中所有的空白字元,包括空格、製表符、回車符等所有空白字元 思路 根據字串長度,利用迴圈遍歷字串此方法太笨拙。這裡利用正則表示式,匹配所有的空白字元,然後將匹配到的空白字元替換為 “” 空串即可。 程式碼 private St

表示式總結(JavaScript、python、PHP、golang、C++、java、C#)之彙總

第一種:JavaScript(ES6) A:分隔符: 例如:reg=/\d(.)\1/g  (切記:不能帶單引號和雙引號) X:ES6之新規則:s 修飾符:dotAll 模式 正則表示式中,點(.)是一個特殊字元,代表任意的單個字元,但是行終止符(line terminat

java中用表示式獲取一個指定的子字元在字串出現的指定次數的下標索引,並且進行字串分割

在開發中遇到這樣的一個報文: 00000123000003RQ0 ################ 000003 <tellerLvl0>0</><brc>3004</><fPIflag>0</><

java-使用表示式擷取字串的時間資訊

package com.yr.method; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @Aut