寫在前面:最近在弄爬取數(shù)據(jù)的html解析,使用正則的時(shí)候遇到一些問題,在這里總結(jié)一下,希望對(duì)和我一樣有困惑的人有幫助。
正則表達(dá)式 - 語法
1.以 (?) 開頭的組
純的非捕獲組,它不捕獲文本,也不針對(duì)組合計(jì)進(jìn)行計(jì)數(shù)。就是說,如果小括號(hào)中以?號(hào)開頭,那么這個(gè)分組就不會(huì)捕獲文本,當(dāng)然也不會(huì)有組的編號(hào)。
(1) 語法
| 字符 | 描述 |
|---|---|
| (?:pattern) | 匹配pattern但不獲取匹配結(jié)果,也就是說這是一個(gè)非獲取匹配,不進(jìn)行存儲(chǔ)供以后使用。這在使用或字符“(|)”來組合一個(gè)模式的各個(gè)部分是很有用。例如“industr(?:y |ies)”就是一個(gè)比“industry |industries”更簡(jiǎn)略的表達(dá)式。 |
| (?=pattern) | 正向肯定預(yù)查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,“Windows(?=95 |98 |NT |2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。預(yù)查不消耗字符,也就是說,在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開始。 |
| (?!pattern) | 正向否定預(yù)查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如“Windows(?!95 |98 |NT |2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。 |
| (?<=pattern) | 反向肯定預(yù)查,與正向肯定預(yù)查類似,只是方向相反。例如,“(?<=95 |98 |NT |2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。 |
| (?<!pattern) | 反向否定預(yù)查,與正向否定預(yù)查類似,只是方向相反。例如“(?<!95 |8 |NT |2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。 |
2.需要轉(zhuǎn)義的特殊字符
| 字符 | 描述 |
|---|---|
| [^xyz] | 負(fù)值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。 |
| \s | 匹配任何不可見字符,包括空格、制表符、換頁符等等。等價(jià)于[ \f\n\r\t\v]。 |