正則表達(dá)式任意字符(包括換行符)的寫(xiě)法
(.*?) 匹配所有字符串
<p class="num">9033</p>
如使用<p class="(.*?)">9033</p>
會(huì)得到num
但是如果帶換行符會(huì)失效,如果需要匹配包括換行符,則使用
([\s\S]*)
再如果,在表達(dá)式中有括號(hào)或其他元字符,需要使用轉(zhuǎn)義。在字符前加一個(gè)\
元字符 | 說(shuō)明 | 舉例 |
^ | 匹配整個(gè)字符串的起始位置,或者行的起始位置,如果在字符組內(nèi)部,則表示排除型(negative)字符組 | ^Start |
$ | 匹配整個(gè)字符串的結(jié)束位置,或者行的結(jié)束位置 | End$ |
() | 分組,提供反向引用(gourp1) \1或多選分支 | (ab)+ |
* + ? | 量詞,限定之前元素出現(xiàn)的次數(shù) | a+ (ab)+ |
. | 默認(rèn)情況下匹配換行符之外的任意字符,在多行模式下可以匹配換行符 | |
[ | 字符組的起始符號(hào) | [0-9] |
\ | 反斜線用來(lái)表示轉(zhuǎn)義序列,或去掉元字符的轉(zhuǎn)義 | \1 |
{ | 重現(xiàn)限定符的開(kāi)始 | {2, 6} |
| | 劃分多選分支(括號(hào)沒(méi)有出現(xiàn)時(shí),可以想象括號(hào)出現(xiàn)在整個(gè)表達(dá)式最外層) | Tom|Jerry |
今天在Java中想使用正則表達(dá)式來(lái)獲取一段文本中的任意字符。于是很隨意得就寫(xiě)出如下匹配規(guī)則:
(.*)
結(jié)果運(yùn)行之后才發(fā)現(xiàn),無(wú)法獲得換行之后的文本。于是查了一下手冊(cè),才發(fā)現(xiàn)正則表達(dá)式中,“.”(點(diǎn)符號(hào))匹配的是除了換行符“\n”以外的所有字符。同時(shí),手冊(cè)上還有一句話:要匹配包括 '\n' 在內(nèi)的任何字符,請(qǐng)使用像 '[.\n]' 的模式。于是我將正則表達(dá)式的匹配規(guī)則修改如下:
([.\n]*),當(dāng)然,如果是在java程序中直接寫(xiě)到話,需要改為([.\\n]*)
結(jié)果再次運(yùn)行程序,發(fā)現(xiàn)什么內(nèi)容也取不到了。我百思不得其解,又將其修改為如下規(guī)則:
([.|\n]*) 以及 ([\n.]*)
結(jié)果還是不行,什么內(nèi)容都取不到。看來(lái)點(diǎn)符號(hào)和換行符卯上勁了~
然后上網(wǎng)一查,雖然沒(méi)有查出上述規(guī)則到底是什么地方出問(wèn)題了,但是查出了一個(gè)解決辦法,經(jīng)過(guò)一試,果然可以匹配包括換行符在內(nèi)的任意字符,以下為正確的正則表達(dá)式匹配規(guī)則:
([\s\S]*)
同時(shí),也可以用 “([\d\D]*)”、“([\w\W]*)” 來(lái)表示。
在文本文件里, 這個(gè)表達(dá)式可以匹配所有的英文
/[ -~]/
這個(gè)表達(dá)式可以匹配所有的非英文(比如中文)
/[^ -~]/
/是VI里用的. 你在editplus或程序里不需要/
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇