測試人學(xué)習(xí)正則表達式

字符集和單詞

“.”用于匹配出換行符之外的任何一個字符。以下正則表達式可以匹配諸如Tomandy,~omandy,$omandy等字符串咳秉。

.omandy

“[]”用于指定一個字符集婉支,無論“[]”中有多少內(nèi)容,在使用時只匹配一個字符澜建。

[a-zA-Z]   #匹配所有的字母
[a-z]      #匹配所有的小寫字母
[abc]      #匹配a或b或c
[0-9]      #匹配0-9之間的數(shù)字

“單詞”指兩側(cè)由非單詞字符分割的字符串向挖◎蛞裕“非單詞字符”指字母、數(shù)字何之、下劃線以外的任何字符跟畅。匹配一個單詞可以使用“\< \>”,舉例如下:

單詞.png

位置及字符匹配

“^”溶推、“$”分別用于匹配行首和行尾徊件,以下表達式用于匹配t開頭,m結(jié)尾蒜危,t和m之間包含一個小寫字母的行虱痕。

^t[a-z]m$

\w 匹配字母或數(shù)字或下劃線或漢字 等價于 '[A-Za-z0-9]'。
\d 匹配數(shù)字辐赞。
\b 匹配單詞的開始或結(jié)束部翘。

tom(\w)?.dat  #可匹配到tom.dat,toma.dat,tom1.dat等。

字符類

POSIX風(fēng)格的正則表達式提供了預(yù)定義的字符類用于匹配某些特定的字符响委,以下正則表達式列出所有以小寫字母開頭新思,m結(jié)束的行。[[:lower:]]等同于[a-z]赘风。

$egrep "^[[:lower:]]m$" words  

常用的字符類如下所示夹囚。

字符類 描述
[[:alnum:]] 文字、數(shù)字字符
[[:alpha:]] 字母字符
[[:lower:]] 小寫字母
[[:upper:]] 大寫字母
[[:digit:]] 小數(shù)
[[:xdigit:]] 十六進制數(shù)字
[[:punct:]] 標點符號
[[:blank:]] 制表符和空格
[[:space:]] 空格
[[:cntrl:]] 所有控制符
[[:print:]] 所有可打印字符
[[:graph:]] 除空格外的所有可打印字符

轉(zhuǎn)義字符

“\”用來表示轉(zhuǎn)義字符贝次,比如“.”在正則表達式中用于匹配換行符之外的任何一個字符崔兴,可以使用“\.”來匹配“.”。

元字符

元字符 描述
* 重復(fù)0次或更多次
+ 重復(fù)1次或更多次
? 重復(fù)0次或1次
{n} 重復(fù)n次
{n,} 重復(fù)n次或更多次
{n,m} 重復(fù)不少于n次蛔翅,不多余m次
(?:pattern) 匹配 pattern但不獲取匹配結(jié)果敲茄,也就是說這是一個非獲取匹配,不進行存儲供以后使用山析。
(?=pattern) 正向肯定預(yù)查堰燎,在任何匹配pattern的字符串開始處匹配查找字符串。該匹配不需要獲取供以后使用笋轨。例如秆剪,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"爵政。
(?!pattern) 跟(?=pattern)相反仅讽,可以匹配到"Windows3.1"中的"Windows"。
(?<=pattern) 反向肯定預(yù)查钾挟,與正向肯定預(yù)查類似洁灵,只是方向相反。例如掺出,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows"徽千,但不能匹配"3.1Windows"中的"Windows"苫费。
(?<!pattern) 與(?<=pattern)相反。
\b 匹配一個單詞邊界双抽,也就是指單詞和空格間的位置百框。例如'er\b'可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'牍汹。
\B 匹配非單詞邊界铐维。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'柑贞。

舉例說明: 例子中#用于表示注釋

^t.*m$     #“.”匹配換行符外的所有字符方椎,".*"表示匹配的字符重復(fù)0次或多次,可匹配tm,tom,tadrm等钧嘶。
^t.+m$     #“.”匹配換行符外的所有字符棠众,".*"表示匹配的字符重復(fù)1次或多次,可匹配tom,tadrm等有决,注意不能匹配tm闸拿。
^t.?m$     #“.”匹配換行符外的所有字符,".*"表示匹配的字符重復(fù)0次或1次书幕,可匹配tm,tom,tam等新荤。
^t.{2}m$   #“.”匹配換行符外的所有字符,".{2}"表示匹配的字符重復(fù)2次台汇,可匹配toom,toam,tabm等苛骨。
^t.{2,}m$  #“.”匹配換行符外的所有字符,".*"表示匹配的字符重復(fù)2次或更多苟呐,可匹配tadm,toljsldjfm等痒芝。
^t.{2,4}m$ #“.”匹配換行符外的所有字符,".*"表示匹配的字符重復(fù)不少于2次牵素,不多余4次严衬,可匹配toam,taadm,t1234m等。

在 *笆呆、+ 或 ? 限定符之后放置?请琳,該表達式從"貪心"表達式轉(zhuǎn)換為"非貪心"表達式或者最小匹配。以下例子所示:
文本: <H1>tomamdy 你是誰</H1>

<.*>   #匹配到  “<H1>tomamdy  你是誰</H1> ”
<.*赠幕?> #匹配到  “<H1>” 和 “</H1> ”
<\w+?> #匹配到  “<H1>”

子表達式

子表達式也稱為分組俄精,看以下例子即可明白。

(tm){2,} #表示匹配tm重復(fù)2次或更多次的行榕堰。
tm{2,}   #表示匹配m重復(fù)2次或更多次的行嘀倒。

反義

"^"可用于表示行首和反義,表示反義用法的例子如下:

[^t]      #表示除t以外的任何字符。
[^abcde]  #表示除abcde以外的任何字符测蘑。
^[^t]     #表示匹配所有不以t開頭的行。

與 或操作

正則表達式對用戶提交的信息簡單地做“與”的操作康二,可以用“|”表示“或”操作碳胳。

^tm$   #所有以t開頭且以m結(jié)尾的行,只能匹配tm沫勿。
^t|m$  #所有以t開頭或以m結(jié)尾的行挨约,可以匹配twerd,adfdfm,tousdwerm等。

子表達式引用

在子表達式中捕獲的內(nèi)容可以在正則表達式的其他地方再次使用产雹〗氩眩可使用“\”加上編號1,2,3等來指定該子表達式匹配到的內(nèi)容,如以下示例:

(\<.*\>).?( )*\1

(\<.*\>)表示匹配任意長度的單詞蔓挖。第1個子表達式夕土。
.?表示匹配0個或1個標點符號".",此處注意"."前面匹配的是單詞瘟判,因此此處只能匹配標點符號怨绣。
( )*表示匹配0個或多個空格。第2個子表達式拷获。
由此分析篮撑,我們不難發(fā)現(xiàn)上述例子,返回的其實是第1個子表達式匹配到的內(nèi)容匆瓜。

非打印字符

字符 描述
\f 匹配一個換頁符
\n 匹配一個換行符
\r 匹配一個回車符
\s 匹配任何空白字符赢笨,空格、制表符驮吱、換頁符等
\S 匹配任何非空白字符
\t 匹配一個制表符
\v 匹配一個垂直制表符

運算符優(yōu)先級順序

運算符 描述
\ 轉(zhuǎn)義符
(), (?:), (?=), [] 括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \任何元字符,任何字符 定位符等
|

表格從上往下標注了運算符的優(yōu)先級從高到低茧妒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市糠馆,隨后出現(xiàn)的幾起案子嘶伟,更是在濱河造成了極大的恐慌,老刑警劉巖又碌,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件九昧,死亡現(xiàn)場離奇詭異,居然都是意外死亡毕匀,警方通過查閱死者的電腦和手機铸鹰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皂岔,“玉大人蹋笼,你說我怎么就攤上這事。” “怎么了剖毯?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵圾笨,是天一觀的道長。 經(jīng)常有香客問我逊谋,道長擂达,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任胶滋,我火速辦了婚禮板鬓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘究恤。我一直安慰自己俭令,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布部宿。 她就那樣靜靜地躺著抄腔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窟赏。 梳的紋絲不亂的頭發(fā)上妓柜,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音涯穷,去河邊找鬼棍掐。 笑死,一個胖子當著我的面吹牛拷况,可吹牛的內(nèi)容都是我干的作煌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼赚瘦,長吁一口氣:“原來是場噩夢啊……” “哼粟誓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起起意,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鹰服,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后揽咕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悲酷,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年亲善,在試婚紗的時候發(fā)現(xiàn)自己被綠了设易。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛹头,死狀恐怖顿肺,靈堂內(nèi)的尸體忽然破棺而出戏溺,到底是詐尸還是另有隱情,我是刑警寧澤屠尊,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布旷祸,位于F島的核電站,受9級特大地震影響讼昆,放射性物質(zhì)發(fā)生泄漏肋僧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一控淡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧止潘,春花似錦掺炭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至么夫,卻和暖如春者冤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背档痪。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工涉枫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腐螟。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓愿汰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乐纸。 傳聞我的和親對象是個殘疾皇子衬廷,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容