目錄
成都創(chuàng)新互聯長期為1000+客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態(tài)環(huán)境。為臨潁企業(yè)提供專業(yè)的成都網站建設、網站制作,臨潁網站改版等技術服務。擁有10余年豐富建站經驗和眾多成功案例,為您定制開發(fā)。一、正則表達式的介紹
二、正則表達式的基本語法
(1)字符類
(2)預定義符
(3)數量詞
三、正則表達式的具體實例
(1)判斷電話號碼是否符合規(guī)則
(2)簡單爬蟲
(3)爬取電話和郵箱
(4)條件爬取
(5)貪婪和非貪婪爬取
(6)正則表達式在字符串表達式中的使用
二、正則表達式的基本語法正則表達式是對字符串操作的邏輯表達式,說的是不是有點抽象呢,那說說它的作用其實更加好懂。正則表達式可以校驗字符串是否符合規(guī)則(規(guī)則由你定),這樣的話你就可以在一段文本內容中查找你想要的內容了
(1)字符類上面說過了正則表達式其實就是對于一個字符串根據你制定的規(guī)則做出的一個邏輯判斷,所以我們會使用其中的一個API,也就是matches函數,參數是你制定的規(guī)則,返回值是boolean型。即字符串.matches(規(guī)則)
(2)預定義符[abc] 只能是abc其中一個字符 [^abc] abc這三個字符不可以被選擇,其他字符可以 [a-zA-Z] 只能在a-z和A-Z這兩個區(qū)間中選擇,兩個區(qū)間以外的字符不可被選 [a-z[A-Z]] 和第三種的意思是一樣的,只能在兩個區(qū)間中被選擇 [a-z&&[def]] a-z和def的交集,也就是說只能取def這三個字符其中之一 [a-z&&[^def]] a-z中并且出了def的字符 [a-z&&[^m-p]] a-z中除了m-p的字符,也就是[a-lq-z]
(3)數量詞. 任意字符 \d 一個數字[0-9] \D 非數字[^0-9] \s 一個空白字符[\t\n\f\r] \S 非空白字符 \w [a-zA-Z_0-9]英文數字下劃線 \W 除了英文數字下劃線
x? x出現了一次或者是0次 x+ x出現了一次或者多次 x* x出現了0次或者是多次 x{n} x出現了正好是n次 x{n,} x出現了至少n次 x{n,m} x出現了至少是n次但是不超過m次
三、正則表達式的具體實例 (1)判斷電話號碼是否符合規(guī)則這里我提醒大家一下,千萬要看清楚你寫的規(guī)則是匹配一個字符還是多個字符??
需求:十一個數字,第一個數字只能是1,最后一個數字不能是0。
(2)簡單爬蟲public class Test { public static void main(String[] args){ Scanner sca=new Scanner(System.in); System.out.print("請輸入你的電話號碼:"); String s=sca.next();//電話號碼 String rule="1[0-9]{9}[1-9]";//定義的規(guī)則 System.out.print(s.matches(rule)); } }
需求:一段文本中查找Java或者是Java出現的版本號
(3)爬取電話和郵箱public class Test { public static void main(String[] args){ String s="市東南部ujbis1Java12史努比偶數" + "圣誕節(jié)你為奶茶店搜防靜電Java1山東噢in計算Jav為oio看上你" + "Java19是可能空島生存·Java30搜堅定Java=數據庫你打算"; String regex="Java\\d{0,2}"; Pattern p= Pattern.compile(regex); Matcher m=p.matcher(s); while(m.find()){ System.out.println(m.group()); } } }
需求:在一段文本中,爬取電話號碼和郵箱
(4)條件爬取public class Test { public static void main(String[] args){ String s="81是的配送費打開你發(fā)182654678541所點擊時間內" + "ujhgtr@163.com搜的金絲楠18871110981是啊都是你的手機卡圣誕節(jié)迫使@163.com" + "搜堅定yuhsyw@163.coomi1搜電腦172890987665搜絕對是gygwas163.com庶竭駑鈍" + "18235454567是第幾行你UIUIu@163.com我似乎單詞表18765432140"; String re1="1\\d{9}[1-9]";//電話號碼 String re2="[a-zA-Z]{6}@163.com"; String re=re1+"|"+re2;//兩個規(guī)則滿足其中之一即可,用豎線 Pattern p=Pattern.compile(re); Matcher m=p.matcher(s); while(m.find()){ System.out.println(m.group()); } } }
((?i)java) 忽略Java的大小寫 (java)(?=7|8) 這里的問號其實可以理解成占位符,總體表達的意思是查找java7或者java8并且輸出時 不顯示java后面的的版本號 (java)(?:7|8) 與上面相反,它是顯示后面的版本號的 (java)(?!7|8) 查找除了java7和java8
需求:在一段文本中查找Java和Java17,Java8,Java7(忽略大小寫)
(5)貪婪和非貪婪爬取public class Test { public static void main(String[] args){ String s="是的蘇北jaVa18是可能都跑了實力派我JaVA89osadisd我的是極品搜" + "JAVA17isadhoJAVA11安排激動java10時都是你我說的菜農Java12是哦滑動SOL" + "是冬季是破煩巴薩jAvA8開始就等你"; String re1="((?i)java)(?=8|7|17)";//查找只輸出前面的java部分 String re2="((?i)java)(?:7|8|17)";//查找同時也輸出后面的部分,也可以寫成((?i)java)(7|18|17) String re3="((?i)java)(?!7|8|17)";//查找除了版本號是8,7,,17 System.out.println("規(guī)則1"); Pattern p1=Pattern.compile(re1); Matcher m1=p1.matcher(s); while(m1.find()){ System.out.println(m1.group()); } System.out.println("規(guī)則2"); Pattern p2=Pattern.compile(re2); Matcher m2=p2.matcher(s); while(m2.find()){ System.out.println(m2.group()); } System.out.println("規(guī)則3"); Pattern p3=Pattern.compile(re3); Matcher m3=p3.matcher(s); while(m3.find()){ System.out.println(m3.group()); } } }
貪婪爬?。涸谂廊祿臅r候盡可能的多獲取數據 非貪婪爬?。涸谂廊祿臅r候盡可能少獲取數 據 只寫+,*表示貪婪爬?。↗ava中默認是貪婪爬取) +?,+*表示非貪婪爬取
(6)正則表達式在字符串表達式中的使用public class Test { public static void main(String[] args){ String s="搜絕對是你uiuisudjh怕端口abbbbb啥動靜那等"; String rex1="ab+"; String rex2="ab?+"; Pattern p1=Pattern.compile(rex1); Pattern p2=Pattern.compile(rex2); Matcher m1=p1.matcher(s); Matcher m2=p2.matcher(s); System.out.println("貪婪爬取"); while(m1.find()){ System.out.println(m1.group()); } System.out.println("非貪婪爬取"); while(m2.find()){ System.out.println(m2.group()); } } }
這里主要介紹兩個方法:replaceAll和split replaceAll(規(guī)則,代替的字符串) 將字符串中符合規(guī)則的字符串替換成代替的字符串,返回值是修改后的 字符串,原來的字符串時不會發(fā)生變化的 split(規(guī)則) 根據規(guī)則切割,返回值是字符串數組
public class Test { public static void main(String[] args){ String s="李三sodjsodjso張三豐0osodndn王天霸"; String ss=s.replaceAll("[a-zA-Z0-9]+","vs"); System.out.println(ss); String[] sc=s.split("[0-9a-zA-Z]+"); System.out.println("字符串數組:"); for(int i=0;i
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站名稱:Java---正則表達式-創(chuàng)新互聯
轉載來源:http://www.rwnh.cn/article42/dcddhc.html
成都網站建設公司_創(chuàng)新互聯,為您提供虛擬主機、營銷型網站建設、手機網站建設、域名注冊、關鍵詞優(yōu)化、App設計
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯