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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

java正则表达式的菜鸟使用分析

發(fā)布時(shí)間:2024/4/14 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java正则表达式的菜鸟使用分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  學(xué)習(xí)這個(gè)東西,菜鳥主要參考的是這兩篇文章:Java正則多字符串匹配替換(網(wǎng)址:http://www.jb51.net/article/34154.htm)、學(xué)習(xí)正則表達(dá)式:Matcher類(網(wǎng)址:http://www.java3z.com/cwbwebhome/article/article8/81313.html?id=3138)

  首先要看懂下面的符號(hào)的意思

  [...] 位于括號(hào)之內(nèi)的任意字符

  [^...] 不在括號(hào)之中的任意字符

  . 除了換行符之外的任意字符,等價(jià)于[^\n]

  \w 任何單字字符, 等價(jià)于[a-zA-Z0-9]

  \W 任何非單字字符,等價(jià)于[^a-zA-Z0-9]

  \s 任何空白符,等價(jià)于[\ t \ n \ r \ f \ v]

  \S 任何非空白符,等價(jià)于[^\ t \ n \ r \ f \ v]

  \d 任何數(shù)字,等價(jià)于[0-9]

  \D 除了數(shù)字之外的任何字符,等價(jià)于[^0-9]

  [\b] 一個(gè)退格直接量(特例)

?

  {n, m} 匹配前一項(xiàng)至少n次,但是不能超過(guò)m次

  {n, } 匹配前一項(xiàng)n次,或者多次

  {n} 匹配前一項(xiàng)恰好n次

  ? 匹配前一項(xiàng)0次或1次,也就是說(shuō)前一項(xiàng)是可選的. 等價(jià)于 {0, 1}

  + 匹配前一項(xiàng)1次或多次,等價(jià)于{1,}

  * 匹配前一項(xiàng)0次或多次.等價(jià)于{0,}

?

  | 選擇.匹配的要么是該符號(hào)左邊的子表達(dá)式,要么它右邊的子表達(dá)式

  (...) 分組.將幾個(gè)項(xiàng)目分為一個(gè)單元.這個(gè)單元可由 *、+、?和|等符號(hào)使用,而且還可以記住和這個(gè)組匹配的字符以供此后引用使用

  \n 和第n個(gè)分組所匹配的字符相匹配.分組是括號(hào)中的子表達(dá)式(可能是嵌套的).分組號(hào)是從左到右計(jì)數(shù)的左括號(hào)數(shù)

?

  ^ 匹配的是字符的開頭,在多行檢索中,匹配的是一行的開頭

  $ 匹配的是字符的結(jié)尾,在多行檢索中,匹配的是一行的結(jié)尾

  \b 匹配的是一個(gè)詞語(yǔ)的邊界.簡(jiǎn)而言之就是位于字符\w 和 \w之間的位置(注意:[\b]匹配的是退格符)

  \B 匹配的是非詞語(yǔ)的邊界的字符

  

  Matcher類有個(gè)非常重要的概念叫做:組(Group)

  例如:\w(\d\d)(w+)

  這個(gè)正則表達(dá)式中是用()來(lái)劃分組的:

  第0組:不看括號(hào),這個(gè)的表達(dá)式就是0組\w(\d\d)(w+)

  第1組:(\d\d)

  第2組:(\w+)

  然后來(lái)做做例子:(為了使\是有效的所以要用\\放在字符串中)

  

1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class Calender { 5 public static void main(String[] args) { 6 Pattern p = Pattern.compile("(\\d\\d)\\1");//第一組是(\\d\\d)表示2個(gè)任何數(shù)字,而后面的\1表示后面的兩個(gè)數(shù)要和前面兩個(gè)一樣 7 String s = "1212";//可以改成2525之類的前兩個(gè)和后兩個(gè)相同的數(shù)字,但不能改成1213這樣的(12和13不同) 8 Matcher m = p.matcher(s);//若是Pattern.compile("(\\d(\\d))\\2")則需改成122才對(duì) 9 if(m.find()){ 10 int gc = m.groupCount(); 11 for(int i = 0; i <= gc; i++) 12 System.out.println("group " + i + " :" + m.group(i)); 13 } 14 } 15 16 }

  輸出結(jié)果為:

    group 0 :1212
    group 1 :12

  現(xiàn)在來(lái)試一個(gè)驗(yàn)證郵箱的有效性的例子:

1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class Calender { 5 public static void main(String[] args) { 6 /** 7 * ^要以字符為開頭才能匹配 8 * 第一組:([a-z0-9_\\.\\-\\+]+)---a-z或0-9或_或.或-或+都可以匹配 9 * 第二組:([\\da-z\\.\\-]+)---數(shù)字或a-z或.或-都可以匹配 10 * 第三組:([a-z\\.]{2,6})---a-z或.匹配最少2次最多6次 11 * $要以字符為結(jié)尾才能匹配 12 */ 13 Pattern p = Pattern.compile("^([a-z0-9_\\.\\-\\+]+)@([\\da-z\\.\\-]+)\\.([a-z\\.]{2,6})$"); 14 String s = "test_-.+@qq.163.sina.com"; 15 Matcher m = p.matcher(s); 16 if(m.find()){ 17 int gc = m.groupCount(); 18 for(int i = 0; i <= gc; i++) 19 System.out.println("group " + i + " :" + m.group(i)); 20 } 21 } 22 }

?

  輸出結(jié)果為:

    group 0 :test_-.+@qq.163.sina.com
    group 1 :test_-.+
    group 2 :qq.163.sina
    group 3 :com

  又來(lái)試試?yán)?#xff1a;

1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class Calender { 5 public static void main(String[] args) { 6 /** 7 * 第一組:(name|value)---選擇name如果沒(méi)有則選擇value 8 * \"---引號(hào) 9 * 第二組:(.+?)---.表示匹配除了換行符之外任意字符、+表示匹配前一項(xiàng)1或n次、?表示匹配前一項(xiàng)0或1次(表示前一項(xiàng)可選) 10 * 如果只是(.+)沒(méi)有?則它一直要到第四個(gè)引號(hào)前才會(huì)停止 11 * 如果只是(.?)沒(méi)有+則name的值必須是一個(gè)或零個(gè)字符的 12 * 不要把(.+?)理解成單純的符號(hào)了 13 */ 14 Pattern p = Pattern.compile("android:(name|value)=\"(.+?)\""); 15 String s = "<meta-data android:name=\"appid\" android:value=\"joy\"></meta-data>"; 16 Matcher m = p.matcher(s); 17 if(m.find()){ 18 int gc = m.groupCount(); 19 for(int i = 0; i <= gc; i++) 20 System.out.println("group " + i + " :" + m.group(i)); 21 } 22 } 23 }

  輸出結(jié)果:

    group 0 :android:name="appid"

    group 1 :name

    group 2 :appid

  上面這個(gè)例子菜鳥糾結(jié)蛋疼的試了半天。

  警句:菜鳥用爪挖,看者需謹(jǐn)慎,切莫聽一面之詞,徒走曲折之路。

轉(zhuǎn)載于:https://www.cnblogs.com/dadadekongjian/p/3208540.html

超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的java正则表达式的菜鸟使用分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。