正則表達式

正則表達式是一種查找以及字符串替換操作站辉。正則表達式在文本編輯器中廣泛使用,比如正則表達式被用于:

檢查文本中是否含有指定的特征詞

找出文中匹配特征詞的位置

從文本中提取信息伍玖,比如:字符串的子串

修改文本

與文本編輯器相似,幾乎所有的高級編程語言都支持正則表達式。在這樣的語境下猜欺,“文本”也就是一個字符串,可以執(zhí)行的操作都是類似的拷窜。一些編程語言(比如Perl开皿,JavaScript)會檢查正則表達式的語法。

正則表達式是什么篮昧?

正則表達式只是一個字符串赋荆。沒有長度限制,但是懊昨,這樣的正則表達式長度往往較短窄潭。如下所示是一些正則表達式的例子:

I had a \S+ day today

[A-Za-z0-9-_]{3,16}

\d\d\d\d-\d\d-\d\d

v(\d+)(.\d+)*

TotalMessages="(.*?)"

<[^<>]>

這些字符串實際上都是微型計算機程序。正則表達式的語法酵颁,實際上是一種輕量級嫉你、簡潔、適用于特定領(lǐng)域的編程語言材义。記住這一點均抽,那么你就很容易理解下面的事情:

每一個正則表達式,都可以分解為一個指令序列其掂,比如“先找到這樣的字符油挥,再找到那樣的字符,再從中找到一個字符款熬。深寥。∠团#”

每一個正則表達式都有輸入(文本)和輸出(匹配規(guī)則的輸出惋鹅,有時是修改后的文本)

正則表達式有可能出現(xiàn)語法錯誤——不是所有的字符串都是正則表達式

正則表達式語法很有個性,也可以說很恐怖

有時可以通過編譯殉簸,使得正則表達式執(zhí)行更快

在實現(xiàn)中闰集,正則表達式還有其他的特點。本文將重點討論正則表達式的核心語法般卑,在幾乎所有的正則表達式中都可以見到這些規(guī)則武鲁。

特別提示:正則表達式與文件通配語法無關(guān),比如 *.xml

正則表達式的基礎(chǔ)語法

字符

正則表達式中包含了一系列的字符蝠检,這些字符只能匹配它們本身沐鼠。有一些被稱為“元字符”的特殊字符,可以匹配一些特殊規(guī)則。

如下所示的例子中饲梭,我用紅色標出了元字符乘盖。

I had a \S+ day today

[A-Za-z0-9-_]{3,16}

\d\d\d\d-\d\d-\d\d

v(\d+)(.\d+)*

TotalMessages="(.*?)"

<[^<>]*>

大部分的字符,包括所有的字母和數(shù)字字符憔涉,是普通字符订框。也就意味著,它們只能匹配它們自己兜叨,如下所示的正則表達式:

cat

意味著布蔗,只能匹配一個字符串,以“c”開頭浪腐,然后是字符“a”,緊跟著是字符“t”的字符串顿乒。

到目前為止议街,正則表達式的功能類似于

常規(guī)的Find功能

Java中的String.indexOf()函數(shù)

PHP中的strpos()函數(shù)

等等

注意:不做特殊說明,正則表達式中是區(qū)分大小寫的璧榄。但是特漩,幾乎所有正則表達式的實現(xiàn),都會提供一個Flag用來控制是否區(qū)分大小寫骨杂。

點“.”

我們第一個要講解的元字符是“.”涂身。這個符號意味著可以匹配任意一個字符。如下所示的正則表達式:

c.t

意味著匹配“以c開頭,之后是任意一個字符搓蚪,緊跟著是字母t”的字符串蛤售。

在一段文本中,這樣的正則表達式可以用來找出cat,cot,czt這樣的字符串妒潭,甚至可以找出c.t這樣的組合悴能,但是不能找到ct或者是coot這樣的字符串。

使用反斜杠“\”可以忽略元字符雳灾,使得元字符的功能與普通字符一樣漠酿。所以,正則表達式

c.t

表示“找到字母c,然后是一個句號(“.”)谎亩,緊跟著字母t”

反斜杠本身也是一個元字符炒嘲,這意味著反斜杠本身也可以通過相似的方法變回到普通字符的用途。因此匈庭,正則表達式

c\t

表示匹配“以字符c開頭,然后是一個反斜杠夫凸,緊跟著是字母t”的字符串。

注意嚎花!在正則表達式的實現(xiàn)中寸痢,.是不能用于匹配換行符的∥裳。”換行符“的表示方法在不同實現(xiàn)中也不同啼止。實際編程時道逗,請參考相關(guān)文檔。在本文中献烦,我認為.是可以匹配任意字符的滓窍。實現(xiàn)環(huán)境通常會提供一個Flag標志位,來控制這一點巩那。

字符類

字符類是一組在方括號內(nèi)的字符吏夯,表示可以匹配其中的任何一個字符。

正則表達式c[aeiou]t即横,表示可以匹配的字符串是”以c開頭噪生,接著是aeiou中的任何一個字符,最后以t結(jié)尾”东囚。在文本的實際應用中跺嗽,這樣的正則表達式可以匹配:cat,cet,cit,cot,cut五種字符串。

正則表達式[0123456789]表示匹配任意一個整數(shù)页藻。

正則表達式[a]表示匹配單字符a桨嫁。

包含忽略字符的例子

a表示匹配字符串[a]

[[]\ab]表示匹配的字符為”[“或者”]”或者”a”,或者”b”

[[]]表示匹配的字符為”\”或者 “[”或者”]”

在字符類中,字符的重復和出現(xiàn)順序并不重要份帐。[dabaaabcc]與[abc]是相同的

重要提示:字符類中和字符類外的規(guī)則有時不同璃吧,一些字符在字符類中是元字符,在字符類外是普通字符废境。一些字符正好相反畜挨。還有一些字符在字符類中和字符類外都是元字符,這要視情況而定彬坏!

比如朦促,.表示匹配任意一個字符,而[.]表示匹配一個全角句號栓始。這不是一回事务冕!

字符類的范圍

在字符集中,你可以通過使用短橫線來表示匹配字母或數(shù)字的范圍幻赚。

[b-f]與[b,c,d,e,f]相同禀忆,都是匹配一個字符”b”或”c”或”d”或”e”或”f”

[A-Z]與[ABCDEFGHIJKLMNOPQRSTUVWXYZ]相同,都是匹配任意一個大寫字母落恼。

[1-9]與[123456789]相同箩退,都是匹配任意一個非零數(shù)字。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佳谦,一起剝皮案震驚了整個濱河市戴涝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖啥刻,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奸鸯,死亡現(xiàn)場離奇詭異,居然都是意外死亡可帽,警方通過查閱死者的電腦和手機娄涩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來映跟,“玉大人蓄拣,你說我怎么就攤上這事∨叮” “怎么了球恤?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荸镊。 經(jīng)常有香客問我碎捺,道長,這世上最難降的妖魔是什么贷洲? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮晋柱,結(jié)果婚禮上优构,老公的妹妹穿的比我還像新娘。我一直安慰自己雁竞,他們只是感情好钦椭,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碑诉,像睡著了一般彪腔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上进栽,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天德挣,我揣著相機與錄音,去河邊找鬼快毛。 笑死格嗅,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的唠帝。 我是一名探鬼主播屯掖,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼襟衰!你這毒婦竟也來了贴铜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绍坝,沒想到半個月后徘意,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡陷嘴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年典挑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毅臊。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡继低,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劳澄,到底是詐尸還是另有隱情地技,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布秒拔,位于F島的核電站莫矗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏砂缩。R本人自食惡果不足惜作谚,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庵芭。 院中可真熱鬧妹懒,春花似錦、人聲如沸双吆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽好乐。三九已至匾竿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蔚万,已是汗流浹背岭妖。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留反璃,地道東北人区转。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像版扩,于是被迫代替她去往敵國和親废离。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

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