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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java正则表达式保姆级教程,从小白到高手

發布時間:2024/1/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java正则表达式保姆级教程,从小白到高手 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

        • 一、正則表達式原字符
          • 1、**限定符**、**轉義符**
          • 2、**字符匹配符**
          • 3、**捕獲分組**、**非捕獲分組**
          • 4、**特殊字符**
          • 5、**選擇匹配符**
          • 6、常用正則表達式
        • 二、java中表達式的應用
          • 1、Pattern類
          • 2、Matcher類
        • 三、實例
          • 1、使用java的正則表達式的一個簡單應用
          • 1、再整一個難活
        • 四、總結

目前所做的項目需要用到正則表達式,重新總結一下正則表達式。

正則表達式看似簡單,實則門路頗多,究其原因也就是其太靈活了。完全掌握還是需要耗費一些功夫的。

一、正則表達式原字符

讀者需對正則表達式元字符有一個初步的印象,實際應用時可以查閱文檔。

正則表達式可以分為六類:限定符、選擇匹配符、分組組合和反向引用符、字符匹配符、定位符、特殊字符

1、限定符轉義符
字符描述
\轉義字符
^匹配輸入字符串的開始位置
$匹配輸入字符串的結束位置
*匹配前面的子表達式零次或多次,等價于{0,}
+匹配前面的子表達式一次或多次,等價于{1,}
?匹配前面的子表達式零次或一次,等價于{0,1}
{n}匹配確定的n次
{n,}至少匹配n次
{n,m}最少匹配n次且最多匹配m次
{?}當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})后面時,匹配模式是非貪婪的
{n,}至少匹配n次
{\b}匹配一個單詞邊界
{\B}匹配非單詞邊界
2、字符匹配符
字符說明
[xyz]匹配所包含的任意一個字符
[^xyz]匹配未包含的任意字符
[a-z]匹配指定范圍內的任意字符
[^a-z]匹配任何不在指定范圍內的任意字符
3、捕獲分組非捕獲分組
字符描述
(pattern)匹配pattern并獲取這一匹配
(?:pattern)匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配
(?=pattern)在任何匹配pattern的字符串開始處匹配查找字符串
4、特殊字符
字符描述
.匹配任何單詞字符,除\n以外,要匹配包括“\n”在內的任何字符,請使用像“(.
\d匹配一個數字字符。等價于[0-9]
\D匹配一個數字字符。等價于[0-9]
\r匹配一個換行
\s匹配任何空白字符
\S匹配任何非空白字符
\w匹配包括下劃線的任何單詞字符
\W匹配任何非單詞字符
\t匹配一個制表符
\W匹配任何非單詞字符
5、選擇匹配符

x|y 匹配x或y

6、常用正則表達式
作用表達式
電子郵箱/^#?([a-f0-9]{6}
URL/^(https?😕/)?([\da-z.-]+).([a-z.]{2,6})([/\w .-])/?$/
中文([\u4e00-\u9fa5]+)

二、java中表達式的應用

java中對正則表達式的應用主要是兩個類,下面是列出的一些常用方法,其中需要指明的是,這些都是靜態方法。

1、Pattern類
compile(String regex) 將給定的正則表達式編譯為Matcher。matches(String regex, CharSequence input)直接匹配當前字符串
2、Matcher類
find(int start) 查找是否存在匹配group(int group) 獲取匹配分組matches() 匹配當前字符串start() 匹配開始位置end(int group) 匹配結束位置replaceAll(String replacement) 匹配替換

三、實例

1、使用java的正則表達式的一個簡單應用
要求:提取出{abc}中的內容@Test public void test11(){String str = "知情同意書簽署日期 {zqdate}<yyyy/mm/dd>";String reg = "\\{+[a-z]?+\\}"; // /<0=表0—入排標準>/--[0,2]//將規則封裝成對象。Pattern p = Pattern.compile(reg);//讓正則對象和要作用的字符串相關聯。獲取匹配器對象。Matcher m = p.matcher(str);while(m.find()){System.out.println(m.group());} }

結果

1、再整一個難活

有這樣一串字符串
仔細觀察這段字符串是 a–a--a形式的 我要的是–部分,然后我這樣寫。

發現提取出來只有一部分。

仔細分析后發現,java默認是采用的貪婪模式。而這段字符串是 a–a--a形式的,它把我第
一個a和最后一個a當做是匹配的一整個。

解決這個問題也很簡單,只需要這樣寫

在限定符*后面加一個?標識這是一個非貪婪模式,結果正常了,作為兩部分返回了。

四、總結

相信讀者能把這兩個例子看懂正則表達式也能有一個初步的掌握,而成為一個正則表達式高手就需要靠你了。

掌握正則表達式一定要多寫,只有寫的多了才可以熟記于心,不會的多查閱文檔。

學知識要知其然,知其所以然。

過去出問題了只會在百度搜索,然后在結果中一個個的嘗試。

現在有問題了,一步步debug源碼尋找問題的根源。希望讀者都能逐漸轉變學習方式。

即使看不懂源碼的每一步,也能對整個過程有一個初步的認識,對于以后學習源碼有極大的幫助。

有問題小伙伴們評論區見喔。

總結

以上是生活随笔為你收集整理的java正则表达式保姆级教程,从小白到高手的全部內容,希望文章能夠幫你解決所遇到的問題。

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