java正則表達(dá)式匹配規(guī)則超詳細(xì)總結(jié)
1 單個(gè)字符的匹配規(guī)則如下:
2 多個(gè)字符的匹配規(guī)則如下:
3 復(fù)雜匹配規(guī)則主要有:
4 提取匹配的字符串子段
Pattern p = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})"); Matcher m = p.matcher("010-12345678"); 正則表達(dá)式用(...)分組可以通過Matcher對象快速提取子串: - group(0)表示匹配的整個(gè)字符串; - group(1)表示第1個(gè)子串,group(2)表示第2個(gè)子串,以此類推。
5 非貪婪匹配
用表達(dá)式
(\d+)(0*)
去匹配123000,10100,1001結(jié)果都是\d+匹配到所有字符而0*未用到,因?yàn)檎齽t表達(dá)式默認(rèn)采取貪婪匹配策略(匹配盡可能多的字符),在\d+后邊加個(gè)?就表示非貪婪(匹配盡可能少的字符),非貪婪如下:
(\d+?)(0*)
6 替換和搜索
6.1 分割字符串
對輸入的不規(guī)則字符串利用string.split()傳入正則表達(dá)式提取想要的部分:
"a b c".split("\\s"); // { "a", "b", "c" } "a b c".split("\\s"); // { "a", "b", "", "c" } "a, b ;; c".split("[\\,\\;\\s]+"); // { "a", "b", "c" }
6.2 搜索字符串
public class Main { public static void main(String[] args) { String s = "the quick brown fox jumps over the lazy dog."; Pattern p = Pattern.compile("\\wo\\w"); Matcher m = p.matcher(s); while (m.find()) { String sub = s.substring(m.start(), m.end()); System.out.println(sub); } } }
output:
row
fox
dog
6.3 替換字符串
使用正則表達(dá)式替換字符串可以直接調(diào)用String.replaceAll(),它的第一個(gè)參數(shù)是正則表達(dá)式,第二個(gè)參數(shù)是待替換的字符串。我們還是來看例子:
public class Main { public static void main(String[] args) { String s = "The quick\t\t brown fox jumps over the lazy dog."; String r = s.replaceAll("\\s+", " "); System.out.println(r); // "The quick brown fox jumps over the lazy dog." } }
6.4 反向引用
如果我們要把搜索到的指定字符串按規(guī)則替換,比如前后各加一個(gè)xxxx,這個(gè)時(shí)候,使用replaceAll()的時(shí)候,我們傳入的第二個(gè)參數(shù)可以使用$1、$2來反向引用匹配到的子串。例如:
public class Main { public static void main(String[] args) { String s = "the quick brown fox jumps over the lazy dog."; String r = s.replaceAll("\\s([a-z]{4})\\s", " <b>$1</b> "); System.out.println(r); } }
output
the quick brown fox jumps <b>over</b> the <b>lazy</b> dog.
總結(jié)
到此這篇關(guān)于java正則表達(dá)式匹配規(guī)則的文章就介紹到這了,更多相關(guān)java正則表達(dá)式匹配規(guī)則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?MVC?請求映射路徑的配置實(shí)現(xiàn)前后端交互
在Spring?MVC中,請求映射路徑是指與特定的請求處理方法關(guān)聯(lián)的URL路徑,這篇文章主要介紹了Spring?MVC?請求映射路徑的配置,實(shí)現(xiàn)前后端交互,需要的朋友可以參考下2023-09-09Java設(shè)計(jì)模式之代理模式(Proxy模式)介紹
這篇文章主要介紹了Java設(shè)計(jì)模式之代理模式(Proxy模式)介紹,本文講解了為什么要使用代理模式、如何使用代理模式等內(nèi)容,需要的朋友可以參考下2015-03-03Java實(shí)現(xiàn)文件批量重命名,移動(dòng)和刪除
這篇文章主要為大家介紹了如何利用Java語言實(shí)現(xiàn)批量重命名,批量移動(dòng)文件,批量刪除tmp文件等功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-08-08Java concurrency集合之CopyOnWriteArraySet_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
CopyOnWriteArraySet基于CopyOnWriteArrayList實(shí)現(xiàn),其唯一的不同是在add時(shí)調(diào)用的是CopyOnWriteArrayList的addIfAbsent(若沒有則增加)方法2017-06-06spring事務(wù)里面開啟線程插入報(bào)錯(cuò)了是否會(huì)回滾
這篇文章主要介紹了spring事務(wù)里面開啟線程插入,報(bào)錯(cuò)了是否會(huì)回滾?這是小編遇到一道面試題,題目大概是這個(gè)樣子,今天抽空通過示例代碼給大家分析下,需要的朋友可以參考下2023-04-04springboot(thymeleaf)中th:field和th:value的區(qū)別及說明
這篇文章主要介紹了springboot(thymeleaf)中th:field和th:value的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Java線程安全問題小結(jié)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java線程安全問題小結(jié)的相關(guān)資料,需要的朋友可以參考下2017-05-05Java實(shí)現(xiàn)BASE64編碼和解碼的方法
本篇文章主要介紹了Java實(shí)現(xiàn)BASE64編碼和解碼的方法,BASE64編碼通常用于轉(zhuǎn)換二進(jìn)制數(shù)據(jù)為文本數(shù)據(jù),有需要的可以了解一下。2016-11-11