正則表達式入門

定義

用來定義搜索模式的一系列字符

A regular expression, regex or regexp (sometimes called a rational expression) is, in theoretical computer science and formal language theory, a sequence of characters that define a search pattern. Usually this pattern is then used by string searching algorithms for "find" or "find and replace" operations on strings.
----來自維基百科

常見的樣子

#perl
/H.+W.+!/si
#python
matchObj = re.search( r'H.+W.+!', str, re.S|re.I )

好用的參考網(wǎng)站

https://regex101.com/

四種用途

在一個字符串里尋找一個子串(一個符合正則表達式定義的子串)鸥印。引申而來的用途有如下四種:
匹配绸贡、捕獲檩电、替換沪悲、分割

六個必要的概念

注意:以下的符號的表述方式采用 perl 里的語法疫向,但盡可能的會保證各種語言都一致

元字符

與字面意思不同的字符刊驴,是正則表達式語法的基石
正則表達式元字符.png

匹配符

匹配一個字符(character)
除了元字符中的 . 和 [ ] 以外喧笔,常見匹配符有:
符號 含義
\n 換行
\s [ \f\n\r\t]
\S \s的補集
\d [0-9]
\D \d的補集
\w [a-zA-Z0-9_]
\W \w的補集
這些匹配符都可以放在 [ ] 里面畜疾,例如:[\s\S] 表示匹配任意一個字符

分組

分組與捕獲
符號 含義
( ) 用于分組,并且能用于捕獲小括弧內(nèi)匹配到的子串
(?: ) 用于分組劫恒,但不捕獲里面匹配到的子串
常見的用法有兩種:
1贩幻、與 | 一起使用轿腺。例如:a(b|c)d 可以匹配字符串 abd 或 acd 
2、與量詞連用丛楚。例如:a(bc)+d 可以匹配字符串 abcbcd

量詞

量詞族壳、貪婪與非貪婪
量詞:跟在匹配符或分組之后,表示匹配符或分組重復(fù)出現(xiàn)若干次
貪婪:盡可能匹配更長的內(nèi)容
非貪婪:盡可能匹配更短的內(nèi)容
默認的是貪婪模式趣些;非貪婪模式需要在量詞后加? 
符號 含義 貪婪 or 非貪婪
* 出現(xiàn)了0次或多次 貪婪
+ 出現(xiàn)了1次或多次 貪婪
? 出現(xiàn)了0次或1次 貪婪
{n} 出現(xiàn)了n次 貪婪
{n, } 出現(xiàn)了至少n次 貪婪
{n, m} 出現(xiàn)了至少n次仿荆,并且不超過m次 貪婪
*? 出現(xiàn)了0次或多次 非貪婪
+? 出現(xiàn)了1次或多次 非貪婪
?? 出現(xiàn)了0次或1次 非貪婪
{n}? 出現(xiàn)了n次 非貪婪
{n, }? 出現(xiàn)了至少n次 非貪婪
{n, m}? 出現(xiàn)了至少n次,并且不超過m次 非貪婪
貪婪與非貪婪的區(qū)別主要體現(xiàn)在捕獲與替換中坏平。
例如:對于字符串 niconiconi 拢操,表達式 (n.*o) 捕獲到的是 niconico,而表達式 (n.*?o) 捕獲的是 nico

定位

匹配兩個字符之間的位置(boundary)
符號 含義
^ 匹配字符串的開始舶替。如果存在修飾符m令境,那么它可以匹配行首
$ 匹配字符串的結(jié)尾。如果存在修飾符m顾瞪,那么它可以匹配行尾
\b Match a \w\W or \W\w boundary
\B Match except at a \w\W or \W\w boundary
\A Match only at beginning of string
\Z Match only at end of string, or before newline at the end
\z Match only at end of string

修飾符

一定程度上改變正則表達式的匹配邏輯舔庶,它一般出現(xiàn)在正則表達式之外。
符號 含義
i 使正則表達式里出現(xiàn)的英文字母可以匹配其大寫和小寫
m 使正則表達式里的 ^ 和 $ 可以匹配行首和行尾
s 使正則表達式里的 . 可以匹配 \n
x 使正則表達式里的空格不匹配任何內(nèi)容陈醒,這樣惕橙,可以使用空格來調(diào)整表達式的格式,使之更容易閱讀钉跷。如果需要匹配空格弥鹦,可以在空格前面加轉(zhuǎn)義符
g 全局匹配,用于捕獲和替換爷辙,只在 perl 中有效

進階

優(yōu)先級

符號 -- 優(yōu)先級從高到低
[ ]
量詞
( )
|

匿名捕獲與命名捕獲

1. 匿名捕獲彬坏,捕獲到的內(nèi)容放在數(shù)組里
2. 命名捕獲,捕獲到的內(nèi)容放在Map里

復(fù)雜定位 (零寬斷言)

符號 含義
(?=pattern) 匹配一個位置膝晾,它后面匹配pattern
(?!pattern) 匹配一個位置苍鲜,它后面不匹配pattern
(?<=pattern) 匹配一個位置,它前面匹配pattern玷犹。注意:這個pattern的長度必須是確定的
(?<!pattern) 匹配一個位置混滔,它前面不匹配pattern。注意:這個pattern的長度必須是確定的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歹颓,一起剝皮案震驚了整個濱河市坯屿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巍扛,老刑警劉巖领跛,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撤奸,居然都是意外死亡吠昭,警方通過查閱死者的電腦和手機喊括,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矢棚,“玉大人郑什,你說我怎么就攤上這事∑牙撸” “怎么了蘑拯?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長兜粘。 經(jīng)常有香客問我申窘,道長,這世上最難降的妖魔是什么孔轴? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任剃法,我火速辦了婚禮,結(jié)果婚禮上路鹰,老公的妹妹穿的比我還像新娘玄窝。我一直安慰自己,他們只是感情好悍引,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著帽氓,像睡著了一般趣斤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上黎休,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天浓领,我揣著相機與錄音,去河邊找鬼势腮。 笑死联贩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的捎拯。 我是一名探鬼主播泪幌,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼署照!你這毒婦竟也來了祸泪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤建芙,失蹤者是張志新(化名)和其女友劉穎没隘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禁荸,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡右蒲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年阀湿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑰妄。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡陷嘴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翰撑,到底是詐尸還是另有隱情罩旋,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布眶诈,位于F島的核電站涨醋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏逝撬。R本人自食惡果不足惜浴骂,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宪潮。 院中可真熱鬧溯警,春花似錦、人聲如沸狡相。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尽棕。三九已至喳挑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滔悉,已是汗流浹背伊诵。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留回官,地道東北人曹宴。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像歉提,于是被迫代替她去往敵國和親笛坦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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

  • 前言 倆件事促使我寫這篇文章苔巨。一則之前面試面試到了正則弯屈,發(fā)現(xiàn)不甚熟悉。二則這些天看jQuery源碼恋拷,一些正則看的有...
    nymlc閱讀 350評論 1 1
  • 什么是正則表達式呢资厉? 正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一...
    chenxiaoer閱讀 406評論 0 1
  • 文:鄭元春 人生苦短蔬顾,我用Python! 接上篇《編程學(xué)習(xí)--正則表達式(入門一)》宴偿,今天把剩下的基礎(chǔ)部分完成湘捎,然...
    北靜王閱讀 805評論 0 13
  • 所有加粗的元字符的雙引號均為了方便表示,所有的正則表達式均在 ‘’ ——單引號中 “/b”:元字符窄刘,代表單詞的開始...
    哎呀_落錦繁華閱讀 217評論 0 0
  • 當我開始思考時 我的生命開始倒數(shù)計時 無限的生命總是無所畏懼的 因為無知所以無畏 如果知道 必然開始畏懼 必然開始...
    未明花香閱讀 176評論 4 1