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正则表达式保姆级教程,从小白到高手的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛顿迭代法求平方根
- 下一篇: 555多谐振荡器及仿真