基於java的Regex,javaRegex
Regex概念
Regex,又稱正規標記法、常規標記法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),電腦科學的一個概念。Regex使用單個字串來描述、匹配一系列符合某個句法規則的字串。在很多文字編輯器裡,Regex通常被用來檢索、替換那些符合某個模式的文本。正則表過式用於操作字串資料。
String類裡有一個方法
public boolean matches(String regex)告知此字串是否匹配給定的Regex。
參數:regex - 用來匹配此字串的Regex
返回:若且唯若此字串匹配給定的Regex時,返回 true
符號簡介:
\\匹配反斜線字元
\r匹配斷行符號符
\t匹配製表符
\f匹配換頁符
\n匹配分行符號
[abc]匹配abc中的一個
[^abc]匹配除了abc中的一個
[a-z]匹配指定範圍內的任意一個字元,例如,“[a-z]”可以匹配“a”到“z”範圍內的任意小寫字母字元。
[A-Z]匹配指定範圍內的任意一個字元,例如,“[A-Z]”可以匹配“A”到“Z”範圍內的任意大寫字母字元。
[a-d[m-p]] 匹配[a-d m-p]並集 //abcd mnop中的一個
[a-z&&[^bc]]匹配[ad-z]範圍內的任一字元//取a-z中的任意但不能取bc
[a-z&&[^m-p]]匹配[a-l q-z]範圍內的任一字元//取a-z中的任意但不能取mnop
[a-z&&[def]]匹配def交集中的任一字元
. 匹配除“\r\n”之外的任何單個字元
\d 匹配一個數字字元。等價於[0-9]
\D 匹配一個非數字字元。等價於[^0-9]
\s 匹配任何不可見字元,包括空格、定位字元、換頁符等等。等價於[\f\n\r\t\v]
\S 匹配任何可見字元。等價於[^\f\n\r\t\v]
\w 匹配單詞字元:等價於[a-zA-Z_0-9]
\W 匹配任何非單詞字元。等價於[^A-Za-z0-9_]
^ 匹配輸入字串的開始位置
$ 匹配輸入字串的結束位置
\b 匹配一個單詞邊界
\B 匹配非單詞邊界
? 匹配一次或一次沒有
* 匹配0次或多次
+ 匹配1次或多次
{n} 匹配恰好n次
{n,} 匹配至少n次
{n,m} 匹配至少n次,但不能超過m次匹配
\1 後向引用,表示運算式中,從左往右數,第一個左括弧對應的括弧內的內容。以此類推,\2表示第二個,\0表示整個運算式
使用String類中的matches方法例子:匹配手機號碼是否正確
public class RegDemo{
public static void main(String[] args) {
String tel="13800001111";
String reg="1[358]\\d{9}"; //1[358][0-9]{9}
boolean b=tel.matches(reg);
System.out.println(tel+":"+b);
}
}
切割:使用String類中的split方法例子:切割字串
public class RegDemo{
public static void main(String[] args) {
String str1="wang_yu_hang";
String str2="zhao fei ";
String str3="tang.chun.lai";
String [ ] strarr1=str1.split("_");
String [ ] strarr2=str2.split(" +");
String [ ] strarr3=str3.split("\\.");
for(String str:strarr1){
System.out.println(str);
}
}
}
替換:使用String類中的replaceAll方法例子:替換字串
public class RegDemo{
public static void main(String[] args) {
String str="helloworld";
str=str.replaceAll("o","xx");
System.out.println(str);
String ss = "tel12344556qq4564654add4646767";
ss= ss.replaceAll("\\d{4,}", "#"); //4個或4個以上的數字連在一起的換成#
System.out.println(ss);
}
}
疊詞替換:想要替換重複出現的單詞,例如aa bbb cccc 任何的單詞都有可能重複,所以使用 .(點)匹配任一字元.然後使用() 括弧將該單詞封裝到組中. 為了重複使用某些規則就將規則封裝為了組.使用()\1 1 是組號,\1引用了組.就是組中是什麼這個位置也是什麼.取值時,使用$1取第一個括弧(組)中的值,以此類推。
擷取:其實使用的是java.util.regex.Pattern 類;java.util.regex.Matcher 類
Matcher類中的常用方法:
public boolean find() 嘗試尋找與該模式比對的輸入序列的下一個子序列。
public String group() 返回由以前匹配操作所匹配的輸入子序列。
public int start() 返回以前匹配的初始索引。
public int end() 返回最後匹配字元之後的位移量。
例子:擷取字串
public class RegDemo{
public static void main(String[] args){
Pattern p = Pattern.compile(“a*b”); //將Regex進行對象封裝
Matcher m = p.matcher(“aaaaab”);//用Regex的方法matcher和字串關聯,擷取對字串操作的匹配對象
Matcher boolean b = m.matches();//通過Mather匹配器對象的方法對字串進行操作
System.out.println(b); //匹配返回true,不匹配則返回false
}
}