校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 正則表達式 學習參考 推薦入門者看

正則表達式 學習參考 推薦入門者看

熱門標簽:百音電話機器人 RO地圖標注app 知名的電話機器人 錫林郭勒盟地圖標注位置 福州工作銷售電話機器人 自制電銷機器人 高德地圖標注短信簽約 電銷機器人公司簡介 湖南企業智能外呼系統供應商

1       概述

正則表達式(Regular Expression)是一種匹配模式,描述的是一串文本的特征。

正如自然語言中“高大”、“堅固”等詞語抽象出來描述事物特征一樣,正則表達式就是字符的高度抽象,用來描述字符串的特征。

正則表達式(以下簡稱正則,Regex)通常不獨立存在,各種編程語言和工具作為宿主語言提供對正則的支持,并根據自身語言的特點,進行一定的剪裁或擴展。

正則入門很容易,有限的語法規則很容易掌握,但是目前正則的普及率并不高,主要是因為正則的流派眾多,各種宿主語言提供的文檔都過多的關注于自身的一些細節,而這些細節通常是初學者并不需要關注的。

當然,如果想要深入的了解正則表達式,這些細節又是必須被關注的,這是后話,讓我們先從正則的基礎開始,進入正則表達式的世界。

2       正則表達式基礎

2.1     基本概念

2.1.1  字符串組成


對于字符串“a5”,是由兩個字符“a”、“5”以及三個位置組成的,這一點對于正則表達式的匹配原理理解很重要。

2.1.2  占有字符和零寬度

正則表達式匹配過程中,如果子表達式匹配到的是字符內容,而非位置,并被保存到最終的匹配結果中,那么就認為這個子表達式是占有字符的;如果子表達式匹配的僅僅是位置,或者匹配的內容并不保存到最終的匹配結果中,那么就認為這個子表達式是零寬度的。

占有字符還是零寬度,是針對匹配的內容是否保存到最終的匹配結果中而言的。

占有字符是互斥的,零寬度是非互斥的。也就是一個字符,同一時間只能由一個子表達式匹配,而一個位置,卻可以同時由多個零寬度的子表達式匹配。

2.1.3  正則表達式構成

正則表達式由兩種字符構成。一種是在正則表達式中具體特殊意義的“元字符”,另一種是普通的“文本字符”。

元字符可以是一個字符,如“^”,也可以是一個字符序列,如“\w”。

2.2     元字符(Meta Character)

2.2.1  […] 字符組(Character Classes)

字符組可以匹配[ ]中包含的任意一個字符。雖然可以是任意一個,但只能是一個。

字符組支持由連字符“-”來表示一個范圍。當“-”前后構成范圍時,要求前面字符的碼位小于后面字符的碼位。

[^…] 排除型字符組。排除型字符組表示任意一個未列出的字符,同樣只能是一個。排除型字符組同樣支持由連字符“-”來表示一個范圍。

表達式

說明

[abc]

表示“a”或“b”或“c”

[0-9]

表示0~9中任意一個數字,等價于[0123456789]

[\u4e00-\u9fa5]

表示任意一個漢字

[^a1]

表示除“a”、“1”、“”外的其它任意一個字符

[^a-z]

表示除小寫字母外的任意一個字符

舉例:

[0-9][0-9]”在匹配“Windows 2003”時,匹配成功,匹配的結果為“20”。

[^inW]”在匹配“Windows 2003”時,匹配成功,匹配的結果為“d”。

2.2.2  常見字符范圍縮寫

對于一些常用的字符范圍,如數字等,由于非常常用,即使使用[0-9]這樣的字符組仍顯得麻煩,所以定義了一些元字符,來表示常見的字符范圍。

表達式

說明

\d

任意一個數字,相當于[0-9],即0~9 中的任意一個

\w

任意一個字母或數字或下劃線,相當于[a-zA-Z0-9_]

\s

任意空白字符,相當于[ \r\n\f\t\v]

\D

任意一個非數字字符,\d取反,相當于[^0-9]

\W

\w取反,相當于[^a-zA-Z0-9_]

\S

任意非空白字符,\s取反,相當于[^ \r\n\f\t\v]

舉例:

\w\s\d”在匹配“Windows 2003”時,匹配成功,匹配的結果為“s 2”。

2.2.3  . 小數點

小數點可以匹配除“\n”以外的任意一個字符。如果要匹配包括“\n”在內的所有字符,一般用[\s\S],或者是用“.”加(?s)匹配模式來實現。

表達式

說明

.

匹配除了換行符 \n 以外的任意一個字符

2.2.4  其它元字符

表達式

說明

^

匹配字符串開始的位置,不匹配任何字符

$

匹配字符串結束的位置,不匹配任何字符

\b

匹配單詞邊界,不匹配任何字符

舉例:

^a”在匹配“cba”時,匹配失敗,因為表達式要求開始位置后面是字符“a”,而“cba”顯然是不滿足的。

\d$”在匹配“123”時,匹配成功,匹配結果為“3”,這個表達式要求匹配結尾處的數字,如果結尾處不是數字,如“123abc”,則是匹配失敗的。

2.2.5  轉義字符

一些不可見字符,或是在正則中具有特殊意義的元字符,如想匹配字符本身,需要用“\”對其進行轉義。

 

表達式

說明

\r,\n

回車和換行

\\

匹配“\”本身

\^,\$,\.

分別匹配“^”、“$”和“.”

以下字符在匹配其本身時,通常需要進行轉義。在實際應用中,根據具體情況,需要轉義的字符可能不止如下所列字符

 .  $  ^  {  [  (  |  )  *  +  ?  \

2.2.6  量詞(Quantifier)

量詞表示一個子表達式可以匹配的次數。量詞可以用來修飾一個字符、字符組,或是用()括起來的子表達式。一些常用的量詞被定義成獨立的元字符。

表達式

說明

舉例

{m}

表達式匹配m次

“\d{3}”相當于“\d\d\d ”

“(abc){2}”相當于“abcabc”

{m,n}

表達式匹配最少m次,最多n次

“\d{2,3}”可以匹配“12”或“321”等2到3位的數字

{m,}

表達式至少匹配m次

“[a-z]{8,}”表示至少8位以上的字母

?

表達式匹配0次或1次,相當于{0,1}

“ab?”可以匹配“a”或“ab”

*

表達式匹配0次或任意多次,相當于{0,}

“[^>]*>”中“[^>]*”表示0個或任意多個不是“>”的字符

+

表達式匹配1次或意多次,至少1次,相當于{1,}

“\d\s+\d”表示兩個數字中間,至少有一個以上的空白字符

注意:在不是動態生成的正則表達式中,不要出現“{1}”這樣的量詞,如“\w{1}”在結果上等價于“\w”,但是會降低匹配效率和可讀性,屬于畫蛇添足的做法。

2.2.7  分支結構(Alternation)

當一個字符串的某一子串具有多種可能時,采用分支結構來匹配,“|”表示多個子表達式之間“或”的關系,“|”是以()限定范圍的,如果在“|”的左右兩側沒有()來限定范圍,那么它的作用范圍即為“|”左右兩側整體。

表達式

說明

|

多個子表達式之間取“或”的關系

舉例:

^aa|b$”在匹配“cccb”時,是可以匹配成功的,匹配的結果是“b”,因為這個表達式表示匹配“^aa”或“b$”,而“b$”在匹配“cccb ”時是可以匹配成功的。

^(aa|b)$”在區配“cccb”時,是匹配失敗的,因為這個表達式表示在“開始”和“結束”位置之間只能是“aa”或“b”,而“cccb”顯然是不滿足的。

3       正則表達式進階

3.1     捕獲組(Capture Group)

捕獲組就是把正則表達式中子表達式匹配的內容,保存到內存中以數字編號或手動命名的組里,以供后面引用。

表達式

說明

(Expression)

普通捕獲組,將子表達式Expression匹配的內容保存到以數字編號的組里

(?name> Expression)

命名捕獲組,將子表達式Expression匹配的內容保存到以name命名的組里

普通捕獲組(在不產生歧義的情況下,簡稱捕獲組)是以數字進行編號的,編號規則是以“(”從左到右出現的順序,從1開始進行編號。通常情況下,編號為0的組表示整個表達式匹配的內容。

命名捕獲組可以通過捕獲組名,而不是序號對捕獲內容進行引用,提供了更便捷的引用方式,不用關注捕獲組的序號,也不用擔心表達式部分變更會導致引用錯誤的捕獲組。

3.2     非捕獲組

一些表達式中,不得不使用( ),但又不需要保存( )中子表達式匹配的內容,這時可以用非捕獲組來抵消使用( )帶來的副作用。

表達式

說明

(?:Expression)

進行子表達式Expression的匹配,并將匹配內容保存到最終的整個表達式的區配結果中,但Expression匹配的內容不單獨保存到一個組內

3.3     反向引用

捕獲組匹配的內容,可以在正則表達式的外部程序中進行引用,也可以在表達式中進行引用,表達式中引用的方式就是反向引用。

反向引用通常用來查找重復的子串,或是限定某一子串成對出現。

表達式

說明

\1,\2

對序號為1和2的捕獲組的反向引用

\kname>

對命名為name的捕獲組的反向引用

舉例:

(a|b)\1”在匹配“abaa”時,匹配成功,匹配到的結果是“aa”。“(a|b)”在嘗試匹配時,雖然既可以匹配“a”,也可以匹配“b”,但是在進行反向引用時,對應()中匹配的內容已經是固定的了。

3.4     環視(Look Around)

環視只進行子表達式的匹配,匹配內容不計入最終的匹配結果,是零寬度的。

環視按照方向劃分有順序和逆序兩種,按照是否匹配有肯定和否定兩種,組合起來就有四種環視。環視相當于對所在位置加了一個附加條件。

 

表達式

說明

(?=Expression)

逆序肯定環視,表示所在位置左側能夠匹配Expression

(?!Expression)

逆序否定環視,表示所在位置左側不能匹配Expression

(?=Expression)

順序肯定環視,表示所在位置右側能夠匹配Expression

(?!Expression)

順序否定環視,表示所在位置右側不能匹配Expression

舉例:

(?=Windows )\d+”在匹配“Windows 2003”時,匹配成功,匹配結果為“2003”。我們知道“\d+”表示匹配一個以上的數字,而“(?=Windows )”相當于一個附加條件,表示所在位置左側必須為“Windows ”,它所匹配的內容并不計入匹配結果。同樣的正則在匹配“Office 2003”時,匹配失敗,因為這里任意一串數字子串的左側都不是“Windows ”。

(?!1)\d+”在匹配“123”時,匹配成功,匹配的結果為“23”。“\d+”匹配一個以上數字,但是附加條件“(?!1)”要求所在位置右側不能是“1”,所以匹配成功的位置是“2”前面的位置。

3.5     忽略優先和匹配優先

或者叫做正則表達式匹配的貪婪與非貪婪模式。

標準量詞修飾的子表達式,在可匹配可不匹配的情況下,總會先嘗試進行匹配,稱這種方式為匹配優先,或者貪婪模式。此前介紹的一些量詞,“{m}”、“{m,n}”、“{m,}”、“?”、“*”和“+”都是匹配優先的。

一些NFA正則引擎支持忽略優先量詞,也就是在標準量詞后加一個“?”,此時,在可匹配可不匹配的情況下,總會先忽略匹配,只有在由忽略優先量詞修飾的子表達式,必須進行匹配才能使整個表達式匹配成功時,才會進行匹配,稱這種方式為忽略優先,或者非貪婪模式。忽略優先量詞包括“{m}?”、“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。

舉例:

源字符串:div>aaa/div>div>bbb/div>

正則表達式1:div>.*/div>      匹配結果:div>aaa/div>div>bbb/div>

正則表達式2:div>.*?/div>     匹配結果:div>aaa/div>

您可能感興趣的文章:
  • php 正則表達式學習筆記
  • 正則表達式口訣_學習正則的朋友值得一看
  • 正則表達式口訣 正則表達式學習工具
  • 正則表達式 學習資料整理
  • JS 正則表達式(學習筆記2)匹配網址url參數
  • Python模塊學習 re 正則表達式
  • javascript的正則表達式學習資料復習
  • 重溫JavaScript中的正則表達式 js學習筆記
  • 正則表達式學習問答
  • Java 正則表達式學習總結和一些小例子
  • MySql官方手冊學習筆記2 MySql的模糊查詢和正則表達式
  • js 正則表達式學習筆記之匹配字符串
  • Powershell學習筆記--使用正則表達式查找文件
  • 正則表達式詳細介紹(上)

標簽:玉林 怒江 昆明 秦皇島 河北 西寧 吉林 茂名

巨人網絡通訊聲明:本文標題《正則表達式 學習參考 推薦入門者看》,本文關鍵詞  正則,表達式,學習,參考,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《正則表達式 學習參考 推薦入門者看》相關的同類信息!
  • 本頁收集關于正則表達式 學習參考 推薦入門者看的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美日韩三级一区| 日韩精品乱码av一区二区| 高清视频一区二区| 国产精品沙发午睡系列990531| 国内精品伊人久久久久av一坑 | 综合自拍亚洲综合图不卡区| 懂色av一区二区三区免费看| 国产精品国产三级国产aⅴ入口| 成人精品鲁一区一区二区| 国产精品不卡一区| 在线一区二区观看| 青青草国产成人99久久| 欧美tickle裸体挠脚心vk| 懂色av中文字幕一区二区三区| 欧美极品aⅴ影院| 一本色道久久加勒比精品 | 免费人成黄页网站在线一区二区 | 91麻豆自制传媒国产之光| 亚洲猫色日本管| 91精品欧美久久久久久动漫| 国产美女视频91| 亚洲色图.com| 欧美成人a视频| 99综合影院在线| 日韩**一区毛片| 国产精品视频免费看| 在线国产亚洲欧美| 国产麻豆精品theporn| 亚洲综合一区二区三区| 久久综合中文字幕| 欧美日韩精品电影| 成人免费精品视频| 人人狠狠综合久久亚洲| 18涩涩午夜精品.www| 欧美一区二区女人| 欧美天堂一区二区三区| 久久99精品久久久久久| 亚洲黄一区二区三区| 久久影院午夜论| 欧美色男人天堂| 91在线视频观看| 国产精品69毛片高清亚洲| 午夜精品成人在线视频| 国产精品久久久久久久裸模| 日韩欧美国产小视频| 欧美色区777第一页| 成人夜色视频网站在线观看| 五月综合激情网| 亚洲蜜桃精久久久久久久| 国产日韩精品一区| 精品成人在线观看| 欧美三级在线视频| 91视频你懂的| 成人白浆超碰人人人人| 国内一区二区在线| 精彩视频一区二区| 美女在线视频一区| 天天亚洲美女在线视频| 亚洲另类在线视频| 亚洲人吸女人奶水| 国产精品看片你懂得| 久久婷婷久久一区二区三区| 欧美一区二区三区免费视频 | 欧美日韩精品福利| 91国偷自产一区二区三区观看 | 国精产品一区一区三区mba桃花 | 成人午夜大片免费观看| 日韩精品每日更新| 九色|91porny| 午夜电影一区二区| 午夜欧美在线一二页| 亚洲视频在线一区二区| 亚洲欧洲日韩综合一区二区| 欧美xxx久久| www国产成人免费观看视频 深夜成人网 | 丁香婷婷综合激情五月色| 精品一区二区免费视频| 日韩精品成人一区二区在线| 天天色天天爱天天射综合| 亚洲免费看黄网站| 一区二区三区在线高清| 中文字幕av一区二区三区高| 国产亚洲自拍一区| 国产亚洲一区二区三区四区| 国产亚洲精品超碰| 久久蜜桃av一区二区天堂| 国产欧美日韩在线| 国产视频在线观看一区二区三区| 国产欧美日韩亚州综合| 国产日韩欧美在线一区| 日韩理论在线观看| 国产精品传媒在线| 中文字幕亚洲一区二区av在线| 国产亚洲综合性久久久影院| 久久久午夜电影| 久久久久久久久蜜桃| 中文无字幕一区二区三区| 国产欧美日韩在线看| 亚洲色图清纯唯美| 亚洲乱码国产乱码精品精的特点| 亚洲成人福利片| 日日骚欧美日韩| 国产精品一品二品| 国产成人精品在线看| 在线观看网站黄不卡| 欧美午夜免费电影| 久久亚洲精华国产精华液 | 国产精品美女久久久久久久久| 亚洲激情男女视频| 亚洲国产精品精华液网站 | 中文字幕一区在线观看视频| 一区二区三区.www| 午夜私人影院久久久久| 国产精品亚洲第一区在线暖暖韩国 | 中文字幕巨乱亚洲| 亚洲人精品午夜| 麻豆国产欧美日韩综合精品二区| 久久99国产精品尤物| 99久久精品费精品国产一区二区| 91福利国产精品| 欧美电影免费观看高清完整版在线观看| 日韩欧美成人激情| 尤物视频一区二区| 麻豆91在线播放免费| 不卡的av中国片| 欧美曰成人黄网| 中文字幕精品三区| 一级中文字幕一区二区| 国产麻豆午夜三级精品| 91在线你懂得| 久久日一线二线三线suv| 国产精品电影院| 精品一二三四在线| 色综合天天综合狠狠| 欧美大片顶级少妇| 亚洲欧美日韩国产成人精品影院| 黄色资源网久久资源365| 不卡免费追剧大全电视剧网站| 欧美一区二区高清| 亚洲色图丝袜美腿| 福利电影一区二区| 777a∨成人精品桃花网| 亚洲靠逼com| 免费看欧美美女黄的网站| av午夜精品一区二区三区| 欧美日韩免费在线视频| 亚洲欧洲精品一区二区精品久久久 | 欧美私人免费视频| 一区二区三区视频在线观看| 国产一区二区三区国产| 在线免费亚洲电影| 中文字幕一区二区三| 久久精品国产亚洲高清剧情介绍| 欧美三级日韩三级| 中文字幕中文字幕在线一区 | 91无套直看片红桃| 久久精品视频网| 国产乱人伦偷精品视频免下载| 欧美亚洲国产怡红院影院| 亚洲美女偷拍久久| 国产成人在线看| 久久久久久日产精品| 丝袜美腿亚洲一区| 91精品国产色综合久久久蜜香臀| 亚洲美腿欧美偷拍| 在线观看日韩高清av| 国产精品毛片高清在线完整版 | 日韩av电影免费观看高清完整版在线观看| 色狠狠色噜噜噜综合网| 日韩一本二本av| 肉肉av福利一精品导航| 欧美日韩激情在线| 亚洲永久免费av| 欧美日韩国产免费一区二区| 亚洲女女做受ⅹxx高潮| bt欧美亚洲午夜电影天堂| 国产亚洲成av人在线观看导航| 国产精品一级二级三级| 久久九九久久九九| 国产乱色国产精品免费视频| 亚洲国产精品成人综合色在线婷婷| 久久99热99| 中文字幕成人av| 国产成人av网站| 亚洲欧美一区二区久久| 99视频超级精品| 一区二区三区四区不卡在线| 91原创在线视频| 午夜精品123| 欧美视频你懂的| 天天av天天翘天天综合网| 日韩免费观看高清完整版| 麻豆精品一区二区av白丝在线| 久久久久久久精| 不卡高清视频专区| 亚洲成人午夜影院| 久久你懂得1024| 欧美在线播放高清精品| 久久疯狂做爰流白浆xx| 精品国产凹凸成av人网站|