正則表達式的學習

正則基礎

\b ? ?是正則表達式的一個特殊代碼,有人稱它元字符。代表的是需要匹配的某個單詞的開頭或者結尾。有些單詞有空格或者分隔符,但是\b并不管這些,它只匹配一個位置,也就是說,空格,分隔符它也比較。

. ? ?是另一個元字符,表示匹配除了換行符以外的任意字符。

* ? ?也是一個元字符,不過它代表的不是字符,也不是位置,而是數量。它制定*字符前邊的內容可以連續重復使用任意次以使整個表達式得以匹配。

.* ? ?連在一起,就表示任意數量除了換行以外的任意字符。

例子:\bhi\b.*\bLucy\b表示以hi開頭,中間任意數量除換行以外的任意字符,并且以Lucy結尾。

\d ? ?是一個新的元字符,匹配任意一個數字(可以是0,可以是1...)

- ? ?不是元字符,其實它就只匹配它本身,可以稱它鏈接符,也可以稱它減號,由自己啦!

例子:0\d\d-\d\d\d\d\d\d\d表示0開頭,后跟2個任意數字,接著是鏈接-,最后是7個任意數字。當然,避免重復,可以簡化寫出0\d{2}-\d{7}

\s ? ?表示匹配任意空白符,包括空格,制表符(tab),換行符,中文全角空格等。

\w ? ?匹配字母,數字,下劃線,或者漢字等。

^ ? ?匹配字符串開始。

$ ? ?匹配字符串結束。

例子:

\ba\w*\b匹配以字母a開頭的單詞——先是某個單詞開始處(\b),然后是字母a,然后是任意數量的字母或數字(\w*),最后是單詞結束處(\b)。

\d+匹配1個或更多連續的數字。這里的+是和*類似的元字符,不同的是*匹配重復任意次(可能是0次),而+則匹配重復1次或更多次。

\b\w{6}\b匹配剛好6個字符的單詞。

{n} ? ?重復N次

{n, } ? ?重復n次到更多次

{n,m} ? ?重復n到m次

{5,12} ? ?表示重復的次數不能少于5次,不能多于12次。

例子:^\d{5,12}$匹配一個5-12位的數字。

\ ? ?表示轉義符。比如你要匹配字符串中的.或者*等等,匹配不到,可以用\.或者\*當然,你要匹配\的話,就用\\

+ ? ?和*相似,但是+表示重復一次或多次。

? ? ?重復0次或1次。

[ ] ? ?指定一個范圍。[0-9]表示一位數字,[a-zA-Z]

例子:\(?0\d{2}[) -]?\d{8}這個表達式可以匹配幾種格式的電話號碼,像(010)88886666,或022-22334455,或02912345678等。我們對它進行一些分析吧:首先是一個轉義字符\(,它能出現0次或1次(?),然后是一個0,后面跟著2個數字(\d{2}),然后是)或-或空格中的一個,它出現1次或不出現(?),最后是8個數字(\d{8})。

不幸的是,上面那個例子也能匹配010)12345678或(022-87654321這樣的“不正確”的格式。要解決這個問題,我們需要用到分枝條件。正則表達式里的分枝條件指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。

| ? ?分割不同的規則,但是使用時候要嚴格注意匹配順序,因為如果符合第一個條件,就不會審核第二個條件了。

例子:0\d{2}-\d{8}|0\d{3}-\d{7}這個表達式能匹配兩種以連字號分隔的電話號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445)。

\(?0\d{2}\)?[-]?\d{8}|0\d{2}[- ]?\d{8}這個表達式匹配3位區號的電話號碼,其中區號可以用小括號括起來,也可以不用,區號與本地號間可以用連字號或空格間隔,也可以沒有間隔。

\d{5}-\d{4}|\d{5}如果你把它改成\d{5}|\d{5}-\d{4}的話,那么就只會匹配5位的郵編(以及9位郵編的前5位)。原因是匹配分枝條件時,將會從左到右地測試每個條件,如果滿足了某個分枝的話,就不會去再管其它的條件了。

( ) ? ?重復多個字符,用()來指定子表達式,也可以叫做分組,可以指定( )中的元素重復多次。

例子:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)判斷正確的IP地址

\W ? ?匹配任意不是字母,數字,下劃線,漢字的字符

\S ? ?匹配任意不是空白符的字符

\D ? ?匹配任意非數字的字符

\B ? ?匹配不是單詞開頭或結束的位置

[^x] ? ?匹配除了x以外的任意字符

[^aeiou] ? ?匹配除了aeiou這幾個字母以外的任意字符

例子:\S+匹配不包含空白符的字符串。

]+> ? ?匹配尖括號開始包含a打頭字母的字符串。

正則匹配進階

后向引用

使用小括號指定一個子表達式后,匹配這個子表達式的文本(也就是此分組捕獲的內容)可以在表達式或其它程序中作進一步的處理。默認情況下,每個分組會自動擁有一個組號,規則是:從左向右,以分組的左括號為標志,第一個出現的分組的組號為1,第二個為2,以此類推。

后向引用用于重復搜索前面某個分組匹配的文本。例如,\1代表分組1匹配的文本。

例子:\b(\w+)\b\s+\1\b可以用來匹配重復的單詞,像go go,或者kitty kitty。這個表達式首先是一個單詞,也就是單詞開始處和結束處之間的多于一個的字母或數字(\b(\w+)\b),這個單詞會被捕獲到編號為1的分組中,然后是1個或幾個空白符(\s+),最后是分組1中捕獲的內容(也就是前面匹配的那個單詞)(\1)。

捕獲

(exp) ? ?匹配exp,并捕獲文本到自動命名的組里

(?exp) ? ?匹配exp,并捕獲文本到名稱為name的組里,也可以寫成(?'name'exp)

(?:exp) ? ?匹配exp,不捕獲匹配的文本,也不給此分組分配組號

引用

\k(Word)反向引用這個分組捕獲的內容

零寬斷言

(?=exp) ? ?匹配exp前面的位置

(?<=exp) ? ?匹配exp后面的位置

(?!exp) ? ?匹配后面跟的不是exp的位置

注釋

(?#comment) ?這種類型的分組不對正則表達式的處理產生任何影響,用于提供注釋讓人閱讀

例子:\b(\w+)\b\s+\1\b通過上面介紹,可以改寫成\b(?\w+)\b\s+\k\b

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數字,標點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,162評論 0 9
  • 注:本篇文章只為方便查看,特此保留,如有冒犯,敬請諒解!!! 本文目標 30分鐘內讓你明白正則表達式是什么,并對它...
    阿杰Alex閱讀 1,503評論 0 10
  • 在工作中我們經常遇到這樣的需求: 1.給你一個字符串,把字符串里面的鏈接、數字、電話等顯示不同的顏色; 2.給你一...
    編程的螞蟻閱讀 4,981評論 6 7
  • 轉載自正則表達式30分鐘入門教程 入門 學習正則表達式的最好方法是從例子開始,理解例子之后再自己對例子進行修改,實...
    夏天的風_song閱讀 1,744評論 0 0
  • 一朝離別兩顆心,三生思念四海情, 五里長廊共佳人,六月雨淋淋。 七夕牛郎鵲橋解相思,八行相思引, 九方飛鴿寄何處,...
    夢怡峒閱讀 121評論 0 0