最簡單的單獨匹配一個單詞涣达,如匹配blue.需要使用\b.它是元字符,代表著單詞的開頭或者結(jié)尾.只匹配一個位置.如匹配單詞blue的方法是\bblue\b.
一些元字符
- \b匹配一個位置
- .(這里是個點规揪,可能看不清)匹配除換行以外任意字符
- *表示重復(fù)零次或更多次
- \d匹配一個數(shù)字
- \s匹配任意的空白符,如空格温峭,制表符猛铅,換行符
- \w匹配數(shù)字,字母凤藏,漢字奸忽,還有下劃線
- ^匹配字符串的開始,$匹配字符串的結(jié)尾
舉例
- \ba\w*\b匹配以a開頭的單詞(有可能是abc清笨,a正則月杉,a_g_)
- \d+匹配一個或者更多連續(xù)的數(shù)字
- \b\w{6}\b匹配剛好6個單詞的單詞
- ^\d{5刃跛,12}$匹配5到12位數(shù)字
重復(fù)的幾種表示方法
- *重復(fù)零或者任意更多次
- +重復(fù)一次或更多次
- ?零或者一次
- {n}重復(fù)n次
- {n抠艾,}n或者更多次
- {n,m}n到m次
方括號的使用[ ]
- [aeiou]匹配任何一個元音字母
- [.?!]匹配其中一個標點符號
- [0-9]匹配一個數(shù)字
- [a-z 0-9 A-Z]
反義
- \W匹配任意非字母桨昙,非數(shù)字检号,非漢子腌歉,非下劃線的字符
- \S匹配除了空白符的字符
- \D匹配任意非數(shù)字的字符
- \B匹配不是單詞開頭或結(jié)尾的位置
- 在方括號里面使用^實現(xiàn)反義,[^a]匹配除了a以外的任意字符
分枝條件| 正則表達式里的替換指的是有幾種規(guī)則齐苛,如果滿足了其中一種規(guī)則都應(yīng)該當成匹配
- 0\d{2}-\d{8}|0\d{3}-\d{7}匹配兩種以連字符分割的電話號碼
- \d{5}-\d{4}|\d{5}匹配美國的郵編翘盖,5位數(shù)字或者用連字號間隔的9位數(shù)字。
之所以給出這個例子凹蜂,是要注意馍驯,使用分枝條件時,順序很重要玛痊。從左到右測試條件汰瘫,一旦滿足了某個條件,就不會去管后面的正則了擂煞。如果換成\d{5}|\d{5}-\d{4},用這個去匹配時混弥,只能匹配到5位數(shù)字,或者9位數(shù)字的前五位
后向引用
還記得前面分組用的小括號嗎对省?后向引用就是給小括號編上號蝗拿,從左到右依次為1,2...
- \b(\w+)\b\s+\1\b這里的\1匹配前面的單詞
- 可以給子表達式自定義名字,使用蒿涎?<name>例如哀托?<word>\w+調(diào)用的時候使用\k<word>
零寬斷言
- (?=exp) //匹配exp前面的位置
- \b\w+(?=ing\b)匹配以ing結(jié)尾的單詞前面的部分
- (?<=exp) //匹配exp后面的位置
- (?<=\bre)\w+\b //匹配以re開頭的單詞后面的部分
- (?!exp) //匹配后面跟的不是exp的位置
- \d{3}(?!\d) //匹配三位數(shù)字,而且三位數(shù)字后面不能是數(shù)字
- (?<!exp) //匹配前面跟的不是exp的位置
- (?<![a-z])\d{7}匹配前面不是小寫字母的七位數(shù)字
- 假如想要在一串很長的數(shù)字中每三位數(shù)字間加一個逗號劳秋,可以這樣來匹配位置((?=\d)\d{3})*\b
- 匹配以空白符間隔的數(shù)字(?<=\s)\d(?=\s)
貪婪與懶惰
- 默認貪婪匹配萤捆,如a.*b用在aababb上的話,會匹配整個字符串
- 想要實現(xiàn)懶惰匹配俗批,需要加上問號a.*?b這樣只會匹配aab
- *? 重復(fù)任意次俗或,但盡可能少重復(fù)
- +? 重復(fù)1次或更多次,但盡可能少重復(fù)
- ?? 重復(fù)0次或1次岁忘,但盡可能少重復(fù)
- {n,m}? 重復(fù)n到m次辛慰,但盡可能少重復(fù)
- {n,}? 重復(fù)n次以上,但盡可能少重復(fù)