在Java中使用基本的正則表達(dá)式
一、正則表達(dá)式簡(jiǎn)介
正則表達(dá)式是使用單個(gè)字符串來(lái)描述、匹配一系列匹配某個(gè)句法規(guī)則的字符串。爬蟲(chóng)中解析html可以使用正則來(lái)方便的提取信息
二、正則表達(dá)式匹配規(guī)則
模式 | 描述 |
---|---|
\w | 匹配字母、數(shù)字、下劃線 |
\W | 匹配非字母、數(shù)字、下劃線 |
\s | 匹配任意空白字符,相當(dāng)于[\t\n\r\f] |
\S | 匹配任意非空字符 |
\d | 匹配任意數(shù)字,相當(dāng)于[0-9] |
\D | 匹配非數(shù)字的字符 |
\A | 匹配字符串開(kāi)頭 |
\Z | 匹配字符串結(jié)尾,如果存在換行,只匹配到換行前的結(jié)束字符串 |
\z | 匹配字符串結(jié)尾,如果存在換行,同時(shí)還會(huì)匹配換行符 |
\G | 匹配最后匹配完成的位置 |
\n | 匹配一個(gè)換行符 |
\t | 匹配一個(gè)制表符 |
^ | 匹配一行字符串的開(kāi)頭 |
$ | 匹配一行字符串的結(jié)尾 |
. | 匹配任意字符,除了換行符 |
[^…] | 不在[]中的字符,比如[^abc]匹配除了a、b、c之外的字符 |
* | 匹配0個(gè)或多個(gè)表達(dá)式 |
+ | 匹配1個(gè)或多個(gè)表達(dá)式 |
? | 匹配0個(gè)或1個(gè)前面的正則表達(dá)式定義的片段,非貪婪方式 |
() | 匹配括號(hào)內(nèi)的表達(dá)式,也表示一個(gè)組 |
{n} | 精確匹配n個(gè)前面的表達(dá)式,比如\d{n},代表n個(gè)數(shù)字 |
{n,m} | 匹配n到m次由前面正則表達(dá)式定義的片段,貪婪方式 |
代碼實(shí)戰(zhàn):
public class RegexAction { public static void main(String[] args) { String s = "Hello 123 4567 World_This is a Regex Demo"; //match_1(s); //match_2(s); //match_3(s); //match_4(s); //match_5(s); match_6(s); } private static void match_1(String s) { Pattern pattern = Pattern.compile("^Hello\\s\\d\\d\\d\\s\\d{4}\\s\\w{10}"); Matcher matcher = pattern.matcher(s); if(matcher.find()) { System.out.println(matcher.group(0)); } } private static void match_2(String s) { Pattern pattern = Pattern.compile("Hello\\s(\\d+)\\s\\d{4}\\s\\w{10}"); Matcher matcher = pattern.matcher(s); if(matcher.find()) { System.out.println(matcher.group(0)); //匹配到的整個(gè)結(jié)果 System.out.println(matcher.group(1)); //匹配到的第一個(gè)括號(hào)中的結(jié)果 } } private static void match_3(String s) { Pattern pattern = Pattern.compile("Hello\\s(\\d*)\\s\\d{4}\\s\\w{10}"); Matcher matcher = pattern.matcher(s); if(matcher.find()) { System.out.println(matcher.group(0)); //匹配到的整個(gè)結(jié)果 System.out.println(matcher.group(1)); //匹配到的第一個(gè)括號(hào)中的結(jié)果 } } private static void match_4(String s) { Pattern pattern = Pattern.compile("Hello.*Demo"); Matcher matcher = pattern.matcher(s); if(matcher.find()) { System.out.println(matcher.group(0)); //匹配到的整個(gè)結(jié)果 } } /** * 貪婪匹配 * 匹配中間數(shù)字,只能得到7 * .*會(huì)盡可能多的匹配數(shù)據(jù) * @param s */ private static void match_5(String s) { Pattern pattern = Pattern.compile("Hello.*(\\d+).*Demo"); Matcher matcher = pattern.matcher(s); if(matcher.find()) { System.out.println(matcher.group(1)); //匹配到的整個(gè)結(jié)果 } } /** * .*?非貪婪匹配 * @param s */ private static void match_6(String s) { Pattern pattern = Pattern.compile("Hello.*?(\\d+).*Demo"); Matcher matcher = pattern.matcher(s); if(matcher.find()) { System.out.println(matcher.group()); System.out.println(matcher.group(1)); } } /** * 正則表達(dá)式字符串也可以不編譯直接使用 * @param s */ private static void match_7(String s) { String regex = "Hello.*?(\\d+).*Demo"; boolean flag = s.matches(regex); System.out.println(flag); } }
- Pattern 類
pattern 對(duì)象是一個(gè)正則表達(dá)式的編譯表示 - Matcher 類
Matcher 對(duì)象是對(duì)輸入字符串進(jìn)行解釋和匹配操作的引擎 - find()方法
嘗試查找與該模式匹配的輸入序列的下一個(gè)子序列,直到搜索到輸入序列結(jié)束
可以從指定位置開(kāi)始匹配find(int start)
到此這篇關(guān)于在Java中使用基本的正則表達(dá)式的文章就介紹到這了,更多相關(guān)Java使用正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解高性能緩存Caffeine原理及實(shí)戰(zhàn)
Caffeine是基于Java 8開(kāi)發(fā)的,提供了近乎最佳命中率的高性能本地緩存組件,Spring5開(kāi)始不再支持Guava Cache,改為使用Caffeine。Caffeine提供的內(nèi)存緩存使用參考Google guava的API2021-06-06Java登錄功能實(shí)現(xiàn)token生成與驗(yàn)證
這篇文章介紹了Java登錄功能實(shí)現(xiàn)token生成與驗(yàn)證,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12SpringBoot實(shí)現(xiàn)jsonp跨域通信的方法示例
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)jsonp跨域通信的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09解決IDEA target文件夾越來(lái)越大的問(wèn)題
這篇文章主要介紹了解決IDEA target文件夾越來(lái)越大的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02SpringBoot中dubbo+zookeeper實(shí)現(xiàn)分布式開(kāi)發(fā)的應(yīng)用詳解
這篇文章主要介紹了SpringBoot中dubbo+zookeeper實(shí)現(xiàn)分布式開(kāi)發(fā)的應(yīng)用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Springboot使用Security實(shí)現(xiàn)OAuth2授權(quán)驗(yàn)證完整過(guò)程
安全管理是軟件系統(tǒng)必不可少的的功能。根據(jù)經(jīng)典的“墨菲定律”——凡是可能,總會(huì)發(fā)生。如果系統(tǒng)存在安全隱患,最終必然會(huì)出現(xiàn)問(wèn)題,這篇文章主要介紹了SpringBoot使用Security實(shí)現(xiàn)OAuth2授權(quán)驗(yàn)證完整過(guò)程2022-12-12基于接口實(shí)現(xiàn)java動(dòng)態(tài)代理示例
這篇文章主要介紹了基于接口實(shí)現(xiàn)java動(dòng)態(tài)代理示例,需要的朋友可以參考下2014-04-04