程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 正則表達式概述及在JAVA中的使用

正則表達式概述及在JAVA中的使用

編輯:關於JAVA

概述

你是否使用過查找*.tmp臨時文件?

你是否使用過編輯工具中的查找/替換功能?

其實它們都使用了正則表達式

正則表達式的作用

提供更強大的字符串處理能力

測試字符串內的模式

例如,可以測試輸入字符串,以查看字符串內是否出現電話號碼模式或身份證號碼模式。即數據驗證

替換文本

可以使用正則表達式來識別文檔中的特定文本,完全刪除該文本或者用其他文本替換它。

基於模式匹配從字符串中提取子字符串

可以查找文檔內或輸入域內特定的文本。

在JAVA中使用正則表達式

正則表達式在字符串處理上有著強大的功能,sun在jdk1.4加入了對它的支持

jdk1.4中加入了java.util.regex包提供對正則表達式的支持。而且Java.lang.String類中的replaceAll和split函數也是調用的正則表達式來實現的。

正則表達式對字符串的操作主要包括:

1.字符串匹配

2.指定字符串替換

3.指定字符串查找

4.字符串分割

Pattern類

Pattern類的實例表示以字符串形式指定的正則表達式,其語法類似於Perl所用的語法。

用字符串形式指定的正則表達式,必須先編譯成Pattern類的實例。生成的模式用於創建Matcher對象,它根據正則表達式與任意字符序列進行匹配。多個匹配器可以共享一個模式,因為它是非專屬的

用compile方法把給定的正則表達式編譯成模式,然後用matcher方法創建一個匹配器,這個匹配器將根據此模式對給定輸入進行匹配。pattern方法可返回編譯這個模式所用的正則表達式。

Matcher類

通過調用某個模式的matcher方法,從這個模式生成匹配器。匹配器創建之後,就可以用它來執行三類不同的匹配操作:

matches方法根據此模式,對整個輸入序列進行匹配

lookingAt方法根據此模式,從開始處對輸入序列進行匹配。

find方法掃描輸入序列,尋找下一個與模式匹配的地方

這些方法都會返回一個表示成功或失敗的布爾值。如果匹配成功,通過查詢匹配器的狀態,可以獲得更多的信息

構建正則表達式

\d 等於 [0-9] 數字

\D 等於 [^0-9] 非數字

\s 等於 [ \t\n\x0B\f\r] 空白字符

\S 等於 [^ \t\n\x0B\f\r] 非空白字符

\w 等於 [a-zA-Z_0-9] 數字或是英文字

\W 等於 [^a-zA-Z_0-9] 非數字與英文字

$表示每行的結尾

.匹配所有字符,包括空格、Tab字符甚至換行符

|或

[]方括號只允許匹配單個字符

^符號稱為“否”符號。如果用在方括號內,表示不想要匹配的字符。表示每行的開頭

()形成一組

查詢

importjava.util.regex.*;
publicclassRegexExample
{
   publicstaticvoidmain(String[]args)
   {
     Stringstr="aaabcefgABC";
     StringregEx="aaa|fff";
     Patternp=Pattern.compile(regEx);//編譯成模式
     Matcherm=p.matcher(str);//創建一個匹配器
     booleanrs=m.find();
     if(rs)
     {
       System.out.println("include!!!");
     }
     else
     {
       System.out.println("noinclude!!!");
     }
   }
}

如果str中有regEx,那麼rs為true,否則為flase。如果想在查找時忽略大小寫,則可以寫成Patternp=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

提取

(從本例給出所給完整路徑中提取文件名)im()p(ortjava.util.rege

public class RegexExample2
{
public static void main(String[] args)
{
String regEx=".+\\\\(.+)$";
String str="c:\\dir1\\dir2\\name.txt";
Pattern p=Pattern.compile(regEx);
Matcher m=p.matcher(str);
boolean rs=m.find();
for(int i=1;i<=m.groupCount();i++)
{
System.out.println(m.group(i));
}
}
}

以上的執行結果為name.txt,提取的字符串儲存在m.group(i)中,其中i最大值為m.groupCount();

分割

importjava.util.regex.*;
publicclassRegexExample3
{
   publicstaticvoidmain(String[]args)
   {
     StringregEx="::";
     Patternp=Pattern.compile(regEx);
     String[]r=p.split("xd::abc::cde");
     for(inti=0;i<r.length;i++)
     {
       System.out.println(r[i]);
     }
   }
}

執行後,r就是{“xd”,“abc”,“cde”},其實分割時還有跟簡單的方法:

Stringstr="xd::abc::cde";

String[]r=str.split("::");

替換(刪除)

importjava.util.regex.*;
publicclassRegexExample1
{
   publicstaticvoidmain(String[]args)
   {
     StringregEx="a+";//表示一個或多個a
     Patternp=Pattern.compile(regEx);
     Matcherm=p.matcher("aaabbcedaccdeaa");
     Strings=m.replaceAll("A");
     System.out.println(s);
   }
}

結果為"AbbcedAccdeA"

如果寫成空串,既可達到刪除的功能,比如:

Strings=m.replaceAll("");

結果為"bbced ccde"

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