Java 正規表示式

2021-07-15 22:53:05 字數 4039 閱讀 9812

正規表示式簡單介紹,校驗qq號

正規表示式是用於字串的處理工具,超級強大.通過正規表示式可以對文字內容進行查詢,替換,分割等操作. 簡化對字串的複雜操作

好處:可以簡化字串的複雜操作

弊端:符號定義越多,正則越長,閱讀性極差

具有操作功能:

1.匹配:用string matches()方法匹配整個字串,只要有1處不符合,就返回false

2.切割:string split()

3.替換:string replaceall()

4.獲取

預定義字元類 

. 任何字元(與行結束符可能匹配也可能不匹配) 

\d 數字:[0-9] 

\d 非數字: [^0-9] 

\s 空白字元:[ \t\n\x0b\f\r] 

\s 非空白字元:[^\s] 

\w 單詞字元:[a-za-z_0-9] 

\w 非單詞字元:[^\w] 

greedy 數量詞 

x? x,一次或一次也沒有 

x x,零次或多次 

x+ x,一次或多次 

x x,恰好 n 次 

x x,至少 n 次 

x x,至少 n 次,但是不超過 m 次 

為了可以讓規則的結果被重用,可以將規則封裝成組,用小括號完成,組的出現都有編號,

從1開始,想要使用已有的組,可以通過\n(n就是組的編號)的形式來獲取

public class regexdemo01 

//替換字串

public static void replacealldemo()"; //連續超過5個的,數字(\d)

string newstr = "#";*/

//要求:將疊詞替換成$號 將重疊的字母替換成單個字母aaaa->a

string str = "dasfaaaafdsgsgggggggggggggregtr";

string reg = "(.)\\1+"; //組,重複出現1次或多次

string newstr = "$1\\$"; //替換成$,則需要轉義字元來弄一下 $可以獲取前面的正規表示式中組的資訊,1表示第1組,而第1組剛好是疊詞的第乙個字母,

str = str.replaceall(reg, newstr); //使用給定的 replacement 替換此字串所有匹配給定的正規表示式的子字串

system.out.println(str); }

//切割字串

public static void splitdemo() }

//校驗手機號 手機號段只有13*** 15*** 18***

public static void checktel()"; //第一位是1,第二位是3,5,8,後面的全是數字,共11位

boolean flag = tel.matches(regex); // 利用正規表示式,看是否符合格式

if (flag) else }

//校驗qq號,5-15位,全是數字,不能以0開始

public static void checkqq()"; // 第1位是1-9的數字,第二位是0-9的數字,且第二位可以有4-14個

boolean flag = qq.matches(regex); // 利用正規表示式,看是否符合格式

if (flag) else }

//[a-z&&[^bc]]:a-z的字母,除了b和c

public static void demo() "; // \代表後面有特殊符號,\d表示0-9的數字

boolean b = str.matches(reg);

system.out.println(b);

}}

下面是獲取的**:

public class regexdemo02 

public static void getdemo()\\b";

//將規則封裝成物件

pattern p = pattern.compile(reg); //無建構函式,通過靜態方法返回已封裝好的pattern物件

//讓正則物件和要作用的字串相關聯 獲取匹配器引擎

matcher m = p.matcher(str); //matcher:通過解釋 pattern 對 character sequence 執行匹配操作的引擎。

//其實string類中的matcher()方法用的就是pattern和matcher來完成的,只不過用string方法封裝過,用起來簡單一些.

while(m.find())

}

}

下面是對於正規表示式的練習:

/**

* 2023年7月31日19:05:16

* 需求:

* 將下列字串轉成:我要學程式設計

* 將ip位址進行位址段順序的排序

* 對郵件位址進行校驗

* * @author xfhy

* 到底用四種功能中的哪乙個?或者哪幾個呢?

* 思路方式:

* 1,如果只想知道該字元是否有錯,使用匹配

* 2,想要將已有的字串變成另乙個字串,替換

* 3,想要按照自定的方式將字串變成多個字串,切割

* 4,想要拿到符合要求的字串,獲取

*/public class regextest01

public static void test(string str)

system.out.println();

//現在得到了字串"我我我我我我要要要要要要要要學學學學學學學編編編程式設計"

str = temp.tostring(); //將上面提取出來的字串轉成string型別

reg = "(.)\\1+"; //規則:任何字元出現了1次或多次,這是組

string newstr = "$1"; //將先前找到的字串替換成第一組

str = str.replaceall(reg, newstr); //規則,替換的原資料

system.out.println(str);

} /*

* 192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30

* * 將ip位址進行位址段順序的排序

* * 還按照字串自然排序,只要讓它們每一段都是3位即可

* 1,按照每一段需要的最多的0補齊,那麼每一段 就會至少保證有3位

* 2,將每一段只保留3位,這樣,所有的ip位址都是每一段3位

* */

public static void ipsort())","$1"); //規則:0出現了0次或多次,組 儲存原來的1組

system.out.println(ip);

string arr = ip.split("[ ]"); //根據空格將每個ip位址分割出來

//自然排序

//for (int i = 0; i < arr.length; i++)

treesetts = new treeset(); //treeset本來就是有序的,新增進去就是有序的,就不用排序了

for(string s : arr)

for(string s : ts) }

/* * 需求:對郵件位址進行校驗

* */

public static void checkmail()";

system.out.println(mail.matches(reg)); //輸出是否對

}}

Java正規表示式

正規表示式結構簡介 字元 x 字元 x 反斜槓 0n 十進位制數 0 n 7 0nn 十進位制數 0nn 0 n 7 0mnn 十進位制數 0mnn 0 m 3,0 n 7 xhh 十六進製制數 0xhh uhhhh 十六進製制數 0xhhhh t 製表符 u0009 n 換行符 u000a r 回...

Java正規表示式

方便查詢的東西 基本語法 轉義字元 in d d d 數字0 9 多少到多少 d 非數字 0 9 非 w 單詞字元 a za z0 9 a3 w 非單詞字元 w s 空白 如 n t 0 1次 1 n次 0 n次 必須是n次 大於等於n次 n demo 中文 u0391 uffe5 英文 a za ...

Java正規表示式

舉例說明 the 開頭一定要有 the 字串 of despair 結尾一定要有 of despair 的字串 那麼,abc 就是要求以abc開頭和以abc結尾的字串,實際上是只有abc匹配。notice 匹配包含notice的字串。你可以看見如果你沒有用我們提到的兩個字元 最後乙個例子 就是說 模...