日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA第五课:正则表达式

發布時間:2023/12/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA第五课:正则表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 序言
  • 一、正則標記
  • 二、正則表達式基礎知識
      • 1、主要包括以下三個類
      • 2、弄清楚( )、[ ]、{ }的作用
  • 三、應用實例
      • 1、匹配
      • 2、切割
      • 3、替換
      • 4、獲取
      • 5、示例
  • 四、總結

序言

??這周按照老師要求,我自學了關于java正則表達式的內容,發現正則表達式在編程中的作用很大,可以用來搜索、編輯或處理文本?,F將學到的正則表達式的知識整理成文。
??在編寫處理字符串的程序或網頁時,經常有查找符合某些復雜規則的字符串的需要。正則表達式就是用于描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。
??Java中Spring.class涉及到正則表達式。如Spring.split(), matches(),replaceAll()等方法。
??Java中更一般使用正則表達式的方式是利用Pattern.class和Matcher.class,所在package為java.util.regex

一、正則標記

1、字符

字符說明
B指定字符B
\xhh十六進制值為oxhh的字符
\uhhhh十六進制值為oxhhhh的Unicode字符
\ttab
\n換行
\r回車
\e轉義

2、字符類

字符類說明
.任意字符
[abc][ ] 中括號,包含a,b,c中任意字符
[^abc][ ]中括號加^, 表示否定,除a,b,c之外的
[a-z]從a到z的任意字符
[a-z&&[hi]]&&表示交集,即包含h或i
\s空白字符,包含空格,換行,回車,tab,換頁
\S大寫為小寫的取反,非空白字符,等價于[^\s]
\d數字0-9
\D非數字,等價于[^0-9]
\w詞字符,數字,大小寫字母,等價于[0-9a-zA-Z]
\W非詞,等價于[^\w]

3、邏輯操作符

邏輯操作符說明
XYY跟在X后面,并且XY同時滿足
XY
(X)() 小括號表示捕獲組(group),可以對group進行處理,尤其是獲取其中的內容

4、邊界匹配符

邊界匹配符說明
^匹配邊界開始
$匹配邊界結束
\b詞的邊界

5、量詞
量詞描述了一個模式匹配文本的方式,包含

  • 貪婪型:量詞默認是貪婪的,發現盡可能多的匹配
  • 勉強型:通過問號(?)指定,匹配最小的字符數,也稱為懶惰型,最少匹配,非貪婪。
  • 占有型:通過加號(+)指定,當用于字符串時防止匹配失敗時回溯。
貪婪型勉強型占有型說明
X?X??X?+匹配0個或1個X
X*X*?X*+匹配0個或多個X
X+X+?X++匹配1個或多個X
X{n}X{n}?X{n}+恰好匹配n個X
X{n,}X{n,}?X{n,}+至少匹配n個X
X{n,m}X{n,m}?X{n,m}+至少匹配n個X,最多匹配m個X

二、正則表達式基礎知識

1、主要包括以下三個類

  • Pattern 類:
    pattern 對象是一個正則表達式的編譯表示。Pattern 類沒有公共構造方法。要創建一個 Pattern 對象,你必須首先調用其公共靜態編譯方法,它返回一個 Pattern 對象。該方法接受一個正則表達式作為它的第一個參數。
  • Matcher 類:
    Matcher 對象是對輸入字符串進行解釋和匹配操作的引擎。與Pattern 類一樣,Matcher 也沒有公共構造方法。你需要調用 Pattern 對象的 matcher 方法來獲得一個 Matcher 對象。
  • PatternSyntaxException:
    PatternSyntaxException 是一個非強制異常類,它表示一個正則表達式模式中的語法錯誤。

2、弄清楚( )、[ ]、{ }的作用

  • 圓括號()是組,主要應用在限制多選結構的范圍/分組/捕獲文本/環視/特殊模式處理
    示例:
    1、(abc|bcd|cde),表示這一段是abc、bcd、cde三者之一均可,順序也必須一致
    2、(abc)?,表示這一組要么一起出現,要么不出現,出現則按此組內的順序出現
    3、(?:abc)表示找到這樣abc這樣一組,但不記錄,不保存到變量中,否則可以通過變量中,否則可以通過x取第幾個括號所匹配到的項,比如:(aaa)(bbb)(ccc)(?:ddd)(eee),可以用$1獲取(aaa)匹配到的內容,而$3則獲取到了(ccc)匹配到的內容,而$4則獲取的是由(eee)匹配到的內容,因為前一對括號沒有保存變量
    4、a(?=bbb) 順序環視 表示a后面必須緊跟3個連續的b
    5、(?i:xxxx) 不區分大小寫 (?s:.*) 跨行匹配.可以匹配回車符

  • 方括號是單個匹配,字符集/排除字符集/命名字符集
    示例:
    1、[0-3],表示找到這一個位置上的字符只能是0到3這四個數字,與(abc|bcd|cde)的作用比較類似,但圓括號可以匹配多個連續的字符,而一對方括號只能匹配單個字符
    2、[^0-3],表示找到這一個位置上的字符只能是除了0到3之外的所有字符
    3、[:digit:] 0-9 [:alnum:] A-Za-z0-9

  • {}一般用來表示匹配的長度
    示例:
    1、\s{3} 表示匹配三個空格
    2、\s{1,3}表示匹配一到三個空格

三、應用實例

1、匹配

匹配數字案例,用正則表達式來判斷字符串中是否全部是數字:

String str = "123456789"; String reg = "\\d+"; boolean b= str.matches(reg); System.out.println(b);

其中\d是正則表達式的匹配模式,為邊界匹配器——單詞邊界。在java中\代表轉義符,所以這里\d應該寫成“\d”,后邊的+是量詞,代表前面的匹配出現的次數是一次或多次。

2、切割

String str = "張三.李四.王五"; String reg = "\\."; String[] arr = str.split(reg); System.out.println("切割得到的長度是:" + arr.length); for(final String s : arr) {System.out.println(s); }

上述的正則將字符串中以”.”為界限進行切割,得到一個字符串數組,切割得到的字符串放進字符串數組的元素中,下標從0開始。如上所述,輸出的結果是:

切割得到的長度是:3 張三 李四 王五
  • 如果字符串是以空格隔開,那么用的正則如下:
String reg = " +";
  • 空白字符一般喜歡用\s來代替,所以如果是空格隔開,那么最好的用法如下:
String rege = "\s+";
  • 切割重疊詞,將疊詞兩邊的字符串分割出來:
String str = "erkktyqqquizzzzzo"; String reg = "(.)\\1+"; String[] arr = str.split(reg); System.out.println("切割得到的長度是:" + arr.length);for(final String s : arr) {System.out.println(s);}

將規則封裝成一個組,用()完成。組的出現都有編號,從1開始,想要使用已有的組可以通過 \n(n是組的編號)的形式來獲取。

3、替換

有這么一個字符串“wer1389980000ty1234564uiod234345675f”,將字符串中的數組替換成#。

public static void replaceAllDemo(String str,String reg,String newStr) {str = str.replaceAll(reg,newStr);System.out.println(str); }replaceAllDemo(str,"\\d{5,}","#");

操作的步奏是,正則先去匹配字符串,如果找到匹配則替換。
替換疊詞,將重疊的字符替換成單個字符,如:tt->t,調用的方法還是如上,傳遞的字符串和正則規則如下:

String str1 = "尋尋覓覓冷冷清清,凄凄慘慘戚戚,乍暖還寒時候,最難將息"; replaceAllDemo(str1,"(.)\\1+","$1");

4、獲取

正則表達式的第四個功能:獲取。將字符串中的符合規則的子串取出。這里必須去了解和使用JAVA封裝的兩個類:Matcher,Pattern。

String str = "Hello Rgex This is the test text!"; System.out.println(str); String reg = "\\b[a-z]{4}\\b";//將規則封裝成對象。 Pattern p = Pattern.compile(reg);//讓正則對象和要作用的字符串相關聯。獲取匹配器對象。 Matcher m = p.matcher(str);System.out.println(m.matches());

其實String類中的matches方法。用的就是Pattern和Matcher對象來完成的。只不過被String的方法封裝后,用起來較為簡單。但是功能卻單一。

public class RegexDemo {public static void main(String[] args) {getDemo();}public static void getDemo(){// 要驗證的字符串String str = "Hello,Rgex,This,is,the,test,text!";// 正則表達式規則String reg = "[a-zA-Z]{2,4}";// 封裝/編譯正則表達式Pattern p = Pattern.compile(reg);// 忽略大小寫的寫法// Pattern pat =Pattern.compile(reg,Pattern.CASE_INSENSITIVE);//讓正則對象和要作用的字符串相關聯。獲取匹配器對象。Matcher m = p.matcher(str);//輸出結果while(m.find()) {String result = m.group();System.out.println(result);}} }

操作步驟:
1.將正則表達式封裝成對象。
2.讓正則對象和要操作的字符串相關聯。
3.關聯后,獲取正則匹配引擎。
4.通過引擎對符合規則的子串進行操作,比如取出。

5、示例

//以空格分割 String str1 = "1 2 3 4 54 5 6"; String[] numbers = str1.split(" +"); for (String temp : numbers) {System.out.println(temp); }// 替換,替換所有的數字為* String str2 = "abd123:adad46587:asdadasadsfgi#%^^9090"; System.out.println(str2.replaceAll("[0-9]", "*")); System.out.println(str2.replaceAll("\\d", "*"));// 匹配出3個字符的字符串 String str = "abc 124 ewqeq qeqe qeqe qeqe aaaa fs fsdfs d sf sf sf sf sfada dss dee ad a f s f sa a'lfsd;'l"; Pattern pt = Pattern.compile("\\b\\w{3}\\b"); Matcher match = pt.matcher(str); while (match.find()) {system.out.println(match.group()); }// 匹配出郵箱地址 String str2 = "dadaadad da da dasK[PWEOO-123- DASJAD@DHSJK.COM DADA@DAD.CN =0KFPOS9IR23J0IS ADHAJ@565@ADA.COM.CN shuqi@162.com UFSFJSFI-SI- "; Pattern pet2 = Pattern.compile("\\b\\w+@\\w+(\\.\\w{2,4})+\\b"); Matcher match2 = pet2.matcher(str2); while (match2.find()) {System.out.println(match2.group()); }

四、總結

正則就是記住規則,然后多加練習就能熟練掌握

總結

以上是生活随笔為你收集整理的JAVA第五课:正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。