主頁 > 知識(shí)庫 > 正則表達(dá)式 學(xué)習(xí)資料整理

正則表達(dá)式 學(xué)習(xí)資料整理

熱門標(biāo)簽:百音電話機(jī)器人 福州工作銷售電話機(jī)器人 知名的電話機(jī)器人 錫林郭勒盟地圖標(biāo)注位置 高德地圖標(biāo)注短信簽約 湖南企業(yè)智能外呼系統(tǒng)供應(yīng)商 RO地圖標(biāo)注app 自制電銷機(jī)器人 電銷機(jī)器人公司簡(jiǎn)介

常用正則表達(dá)式 整理篇
https://www.jb51.net/article/17355.htm

正則表達(dá)式高級(jí)學(xué)習(xí)技巧
https://www.jb51.net/article/9229.htm

1.正則表達(dá)式簡(jiǎn)介

正則表達(dá)式(Regular expression,簡(jiǎn)寫為Regexes)是一種用來操作和檢驗(yàn)字符串?dāng)?shù)據(jù)的強(qiáng)大工具。它相當(dāng)與一串特殊的字符,用它可以轉(zhuǎn)換成算法,對(duì)文本進(jìn)行匹配等操作。

       事實(shí)上正則表達(dá)式有其自身的一套語法,這種語法對(duì)于初學(xué)者來說顯得有些晦澀難懂。尤其是其構(gòu)造比較困難,稱為很多入門者的障礙。但當(dāng)掌握后卻可以輕易的解決以前不容易解決的很多文本類問題,如驗(yàn)證提取等。

其常用場(chǎng)合有如下三種:

Ø        測(cè)試字符串的某個(gè)模式。例如,可以對(duì)一個(gè)輸入字符串進(jìn)行測(cè)試,看在該字符串是否存在一個(gè)電話號(hào)碼模式或一個(gè)信用卡號(hào)碼模式。這稱為數(shù)據(jù)有效性驗(yàn)證。

Ø        替換文本??梢栽谖臋n中使用一個(gè)正則表達(dá)式來標(biāo)識(shí)特定文字,然后可以全部將其刪除,或者替換為別的文字。

Ø        根據(jù)模式匹配從字符串中提取一個(gè)子字符串。可以用來在文本或輸入字段中查找特定文字。      

2.正則表達(dá)式基礎(chǔ)語法

2.1匹配不同類型的字符

 

字符類

匹配的字符

\d

匹配一個(gè)數(shù)字字符。等價(jià)于 [0-9]

\D

匹配一個(gè)非數(shù)字字符。等價(jià)于 [^0-9]

\w

匹配包括下劃線的任何單詞字符。等價(jià)于'[A-Za-z0-9_]'

\W

匹配任何非單詞字符。等價(jià)于 '[^A-Za-z0-9_]'。

\s

匹配任何空白字符,包括空格、制表符、換頁符等等。等價(jià)于 [ \f\n\r\t\v]

\S

匹配任何非空白字符。等價(jià)于 [^ \f\n\r\t\v]

.(點(diǎn)號(hào))

任一字符

[...]

括號(hào)中的任一字符

[^…]

非括號(hào)中的任一字符

2.2定位控制字符

^

其后的模式必須在字符串的開始處,如果是多行則在任一行的開始C#需要設(shè)定Multiline標(biāo)志

$

前面的模式必須在一行的末尾,如果是多行,則在任意行的末尾

\A

前面的模式必須在字符串的開始處;多行標(biāo)志被忽略

\z

前面的模式必須在字符串的末尾處,多行標(biāo)志被忽略

\Z

前面的模式必須位于字符串的末尾或位于換行符前

\b

匹配一個(gè)單詞字符的開始,單詞字符是[a-zA-Z0-9]中的一位

\B

匹配一個(gè)非單詞邊界的位置, 不在一個(gè)單詞的開始

2.3指定重復(fù)字符

{n}

匹配前面的字符n

{n,}

匹配前面的字符最少n

{n,m}

匹配前面的字符nm

?

匹配前面的字符0次或1

+

匹配前面的字符至少1

*

匹配前面的字符至少0

2.4特殊控制類

|

指定字符替換,即該位置可以是|兩邊的任一個(gè)表達(dá)式

2.5 特殊字符轉(zhuǎn)義序列

\\

匹配”\”

\.

匹配“.

\*

匹配“*

\(

匹配“(”

\)

匹配”)”

\?

匹配“?“

\+

匹配“+

\|

匹配“|

\{

匹配“{

\}

匹配“}

\^

匹配“^

\$

匹配“$

\n

匹配換行符

\r

匹配回車

\t

匹配Tab

\v

匹配垂直制表符

\f

匹配換頁符

\nnn

匹配一個(gè)三位八進(jìn)制數(shù)指定的ASCII字符,如\103匹配C

\xnn

匹配一個(gè)二位16進(jìn)制數(shù)指定的ASCII字符,例如\x43匹配C

\unnnn

匹配一個(gè)416進(jìn)制數(shù)指定的Unicode字符

\cV

匹配一個(gè)控制字符,(如復(fù)制Ctrl+C

2.6正則表達(dá)式分組、替換、反向引用等高級(jí)應(yīng)用

以上只是正則表達(dá)式的基礎(chǔ)部分,從這里開始才算真正開始正則表達(dá)式之旅。

²       分組

分組技術(shù)可以匹配在一個(gè)組中的所有字符,用()來表示,是下面兩個(gè)技術(shù)的基礎(chǔ)所在?!埃ǎ坝址Q捕獲符號(hào)。

1.    捕獲:()

例子:ABC1EDF2UU

匹配組表達(dá)式:([A-Z]{3})\d  --匹配3個(gè)連續(xù)大寫字母和一個(gè)數(shù)字

匹配結(jié)果:1.ABC1,2.EDF2

如果用C#中的group,則為ABC,EDF。因?yàn)?SPAN lang=EN-US>group搜集的是匹配組的內(nèi)容。
2.
非捕獲(?:)

使用了非捕獲就說明該()中的內(nèi)容將不作為捕獲的組返回,而和其它表達(dá)式共同構(gòu)成匹配項(xiàng)返回。也就是捕獲組將不存在。

例:1AF3EDC

匹配表達(dá)式:(?:\d|[A-Z]\w  --匹配一個(gè)數(shù)字或字母加一個(gè)任意的字符。

匹配結(jié)果:1.1A 2.F3 3.ED

沒有組被捕獲

2.    通過名稱捕獲(?name>

定義了名稱捕獲的組可以在反向匹配中運(yùn)用名稱進(jìn)行反向引用而不需要再使用數(shù)字進(jìn)行反向捕獲。注意組名區(qū)分大小寫!

²       替換

替換,顧名思義,是將匹配的字符替換成其他指定的字符形式。這個(gè)功能是在分組的基礎(chǔ)上的(當(dāng)然或許可以單獨(dú)存在,但是那樣匹配的功能顯然不夠強(qiáng)大)。在這里有一個(gè)技巧是使用附加的匹配字符控制匹配內(nèi)容。

$group

group指定的組號(hào)進(jìn)行替換

${name}

替換由?name>匹配的最后一個(gè)子串

$$

替換字符$

$

替換整個(gè)的匹配

$+

替換最后捕獲的組

$

替換整個(gè)輸入的字符串

 

²       反向引用

反向匹配可以引用前面組中的匹配形式。“\匹配組的數(shù)字表示(1為基數(shù))“或者”\kgroupname>

²       高級(jí)組

1.    正聲明(?=

規(guī)定了括號(hào)中的模式必須出現(xiàn)在聲明的右側(cè)。模式將不構(gòu)成匹配的一部分。

2.    負(fù)聲明(?!

規(guī)定了括號(hào)中的模式不能出現(xiàn)在聲明的右側(cè),模式將不構(gòu)成匹配的一部分。

3.    反向正聲明(?=

規(guī)定了括號(hào)中的模式必須出現(xiàn)在聲明的左側(cè),模式將不構(gòu)成匹配的一部分。

4.    反向負(fù)聲明(?!

規(guī)定了括號(hào)中的模式必須出現(xiàn)在聲明的左側(cè)。模式不構(gòu)成匹配的一部分。

5.    非回溯(?>

防止了正則表達(dá)式引擎搜索失敗時(shí)回溯,這稱之為貪婪的子表達(dá)式。

如輸入字符串:He  was very trusting.

正則表達(dá)式:.*ing將匹配trusting但是如果加入(?>ing則不能完成匹配。

非回溯組也是非捕獲組。他對(duì)于提高正則表達(dá)式的效率很有效。

如匹配一個(gè)www.****.com的網(wǎng)址。使用www\.(.*)\.com顯然要比www\.([^.]*)\.com效率要低的多,因?yàn)榍罢弑仨毷褂媒M中的回溯操作,回溯是很艱難的過程,所以當(dāng)使用非回溯的正則表達(dá)式時(shí)時(shí)可以顯著提高正則表達(dá)式的效率的。

其實(shí)正則表達(dá)式是只注重匹配結(jié)果的,所以會(huì)努力去匹配所存在的字符串。這就是它的貪婪性所在。(這點(diǎn)其實(shí)理解的不是太深)。

注意以上這些(1-5)都不能夠用于反向引用,因?yàn)橐陨下暶鲗⒉蛔鳛槠ヅ涞囊徊糠帧?/FONT>

2.7在正則表達(dá)式中做決策

高級(jí)決策的兩種寫法:

1=>(?(expressionyes|no)

2=>(?(?=expression)yes|no)

這兩種方式中的的expression匹配則后面進(jìn)行匹配yes,否則匹配no。

需要注意的一點(diǎn)是yes測(cè)試和決策測(cè)試是在同一個(gè)起點(diǎn)里進(jìn)行的。

如以下字符串:77-77A 69-AA 57-B

匹配表達(dá)式為:(\d7)?-(?(1)\d\d[A-Z]|[A-Z][A-Z])

匹配結(jié)果為:

1.77-77A   2. –AA

這個(gè)正則表達(dá)式中用到了引用組,(?(1**)中的1也可以換為\1,這樣不影響匹配。這個(gè)匹配中如果將決策后面的\d\d去掉則會(huì)出現(xiàn)不同的結(jié)果,這時(shí)只會(huì)有一個(gè)-AA是匹配的。因?yàn)闆Q策點(diǎn)和yes表達(dá)式是從同一個(gè)起點(diǎn)開始匹配所以即使決策點(diǎn)匹配了,但是后面的yes表達(dá)式仍然不匹配。就只匹配no部分的表達(dá)式。最終結(jié)果也必然改變,理解這一點(diǎn)很重要。

2.8 正則表達(dá)式的選項(xiàng)

快到結(jié)尾了,再說下正則表達(dá)式的選項(xiàng)。選項(xiàng)其實(shí)就是將正則表達(dá)式的設(shè)置改到組中來。如(?i:[a-z])將忽略大小寫進(jìn)行匹配。實(shí)際上如果學(xué)過Javascript中的正則表達(dá)式,可以看出這個(gè)ijavascript中表示的還是這個(gè)意思。

N

規(guī)定只有顯示命名的組標(biāo)號(hào)的組才能有效的捕獲

I

此選項(xiàng)匹配不區(qū)分大小寫的匹配

X

此選項(xiàng)規(guī)定,非轉(zhuǎn)義的空字符被排除在模式之外,并啟用了一個(gè)前綴#的注釋

M

指定多行模式,修改了^$的定義

S

指定單行模式

2.9正則表達(dá)式的規(guī)則

1.正則表達(dá)式會(huì)對(duì)輸入字符傳進(jìn)行最快的匹配,它一次搜索一個(gè)字符,知道實(shí)現(xiàn)第一次匹配。

2.發(fā)現(xiàn)一個(gè)匹配的開始后,正則表達(dá)式引擎將繼續(xù)匹配,直到遇到一個(gè)不被模式接收的字符。

3.Regex引擎非常貪婪只要模式匹配它將匹配盡可能多的字符。

4.Regex渴望實(shí)現(xiàn)匹配,所以將在需要時(shí)回溯以實(shí)現(xiàn)匹配。

5.Regex引擎總是先選擇第一個(gè)選項(xiàng)。在|式表達(dá)式中。

以上的幾點(diǎn)很重要。到這正則表達(dá)式的幾乎所有規(guī)則也就講完了。

最后附一個(gè)懶惰匹配常用修飾和其他的限定

*?

盡可能少地使用重復(fù)的第一個(gè)匹配

+?

盡可能少地使用重復(fù)但至少使用一次

??

使用零次重復(fù)(如有可能)或一次重復(fù)

{n}

等同于{n}

{n, }?

盡可能少地使用重復(fù)但至少使用n

{n,m}?

介于nm之間,盡可能少地使用重復(fù)

作者:hanxing0的專欄
您可能感興趣的文章:
  • 正則表達(dá)式簡(jiǎn)介及在C++11中的簡(jiǎn)單使用教程
  • 正則表達(dá)式匹配不包含某些字符串的技巧
  • 正則表達(dá)式(括號(hào))、[中括號(hào)]、{大括號(hào)}的區(qū)別小結(jié)
  • 匹配中文漢字的正則表達(dá)式介紹
  • 匹配yyyy-mm-dd日期格式的的正則表達(dá)式
  • 精通JS正則表達(dá)式(推薦)
  • 正則表達(dá)式基本語法詳解
  • 常見的數(shù)字驗(yàn)證正則表達(dá)式整理
  • 最全的常用正則表達(dá)式大全——包括校驗(yàn)數(shù)字、字符、一些特殊的需求等
  • C語言正則表達(dá)式操作示例

標(biāo)簽:玉林 吉林 昆明 河北 西寧 怒江 秦皇島 茂名

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《正則表達(dá)式 學(xué)習(xí)資料整理》,本文關(guān)鍵詞  正則,表達(dá)式,學(xué)習(xí)資料,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《正則表達(dá)式 學(xué)習(xí)資料整理》相關(guān)的同類信息!
  • 本頁收集關(guān)于正則表達(dá)式 學(xué)習(xí)資料整理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章