日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

正则表达式知识详解(转自晴天碧日)

發(fā)布時(shí)間:2025/3/8 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则表达式知识详解(转自晴天碧日) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、什么是正則表達(dá)式?

1.定義:

正則表達(dá)式(regular expression)描述了一種字符串匹配的模式,可以用來(lái)檢查一個(gè)串是否含有某種子串、將匹配的子串做替換或者從某個(gè)串中取出符合某個(gè)條件的子串等。構(gòu)造正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣。也就是用多種元字符與運(yùn)算符可以將小的表達(dá)式結(jié)合在一起來(lái)創(chuàng)建更大的表達(dá)式。正則表達(dá)式的組件可以是單個(gè)的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。

2.組成:

正則表達(dá)式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為"元字符")組成的文字模式。模式描述在搜索文本時(shí)要匹配的一個(gè)或多個(gè)字符串。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與所搜索的字符串進(jìn)行匹配。

3.何時(shí)使用:驗(yàn)證——從頭到尾完整匹配!

????????????查找——只要部分匹配即可!

二、正則表達(dá)式的基本語(yǔ)法和規(guī)則

?1.備選字符集:規(guī)定某*一位字符*可用的備選字符的集合

??????語(yǔ)法:[可選字符列表]

??????強(qiáng)調(diào):1.?無(wú)論備選字符集包含多少字符,只能選1個(gè)

????????????2.?必須選1個(gè)!

??????比如:6位數(shù)字的密碼

[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]

?????簡(jiǎn)化:1.?當(dāng)備選字符連續(xù)時(shí),可用-表示范圍的區(qū)間

????????比如:[0123456789]-->[0-9]

????????[0-9][0-9][0-9][0-9][0-9][0-9]

????????[a-z]-->1位小寫字母

????????[A-Z]-->1位大寫字母

????????[A-Za-z]-->1位字母,大小寫都行

????????[0-9a-zA-Z]-->1位字母或數(shù)字都行

?????反選:[^不能選的字符列表]

?????比如:[^47]?強(qiáng)調(diào):^作“除了”使用時(shí),只能放在開頭

2.?預(yù)定義字符集:為常用的字符集專門提供的簡(jiǎn)化寫法!

????“\d”-->[0-9]-->1位數(shù)字

????“\w”-->[0-9a-zA-Z_]-->1位字母,數(shù)字或_

????“\s”-->1位空字符:匹配任何空白字符,包括空格、制表符、換頁(yè)符等等。等價(jià)于 [ \f\n\r\t\v]。

?“?. “:?除換行回車外的任何一個(gè)字符,如:

"a.[0-9]":表示一個(gè)字符串有一個(gè)"a"后面跟著一個(gè)任意字符和一個(gè)數(shù)字;
"^.{3}$":表示有任意三個(gè)字符的字符串(長(zhǎng)度為3個(gè)字符)

\t--------匹配一個(gè)制表符???

????預(yù)定義字符的反義:預(yù)定義字符的大寫形式都是小寫的反義

????\D---->1位非數(shù)字字符

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

\v------匹配一個(gè)垂直制表符

\n------匹配一個(gè)換行符

\r-------匹配一個(gè)回車符

?3.?數(shù)量詞:規(guī)定相鄰的字符集可出現(xiàn)的次數(shù)

? 確定數(shù)量:3種:

{n}-->?必須反復(fù)出現(xiàn)n位

???????????{n,m}-->?最少出現(xiàn)n次,最多出現(xiàn)m次

???????????{n,}-->至少出現(xiàn)n次,多了不限!

??????比如:/^\d{6}$/——6位數(shù)字

??????手機(jī)號(hào)規(guī)則:

????????第1位:只能是1

????????第2位:[34578]

????????第3位之后,必須是9位數(shù)字

??????手機(jī)號(hào):/^1[34578]\d{9}$/

?不確定數(shù)量:3種:

????????*:?有沒有都行,次數(shù)不限,相當(dāng)于{0,}

????????+:?至少1次,重復(fù)次數(shù)不限,相當(dāng)于{1,}

?????????:?有沒有都行,最多1次,相當(dāng)于{0,1}

????????():分組

????????|:?左右兩正則表達(dá)式選其一

??????身份證號(hào)邏輯:

????????前15位數(shù)字

????????16,17位必須是數(shù)字

????????最后一位可以是數(shù)字或X x

????????后三位 可有可無(wú),如果有,只能出現(xiàn)一次

??????\d{15}(\d\d[0-9Xx])?

?

??????手機(jī)號(hào):

????????手機(jī)號(hào)前可能出現(xiàn)+86或0086。

????????前綴可有可無(wú),且只能出現(xiàn)一次

????????前綴和手機(jī)號(hào)之間可以有或沒有任意個(gè)空字符?

  ??第1位:只能是1

????????第2位:[34578]

????????第3位之后,必須是9位數(shù)字

??????手機(jī)號(hào):

??????(\+86|0086)?\s*1[34578]\d{9}

????

4.?指定匹配位置

??????^表達(dá)式:?必須以表達(dá)式的規(guī)則為開頭

??????表達(dá)式$:?必須以表達(dá)式的規(guī)則為結(jié)尾

?????比如:選擇字符串開頭的空格?^\s*

???????????選擇結(jié)尾空格?\s*$

???????????選擇開頭或結(jié)尾的空格?^\s*|\s*$

?????*預(yù)告:今后只要在程序中執(zhí)行驗(yàn)證:都要前加^后加$*

????????????表示從頭到尾完整匹配。

?????比如:test():

???????^\d{6}$——從頭到尾必須只能是6位數(shù)字

???????1234567

5.?預(yù)判:在正式匹配正則表達(dá)式之前,先預(yù)讀整個(gè)字符串,進(jìn)行初步匹配,如果預(yù)判都未通過(guò),則不再驗(yàn)證!

?1)(?=表達(dá)式):?先瀏覽字符串是否滿足表達(dá)式的要求

??????何時(shí)使用:只要正則中出現(xiàn)類似"而且"

??????比如:4位數(shù)字,但不能包含4和7

??????(?=[^47]$)?是否由除了4,7之外的字符組成

?2)(?!表達(dá)式):先檢查字符串是否不滿足表達(dá)式要求

   比如:6位以上密碼。

???字母,數(shù)字組成

???????????首字母不能是數(shù)字: [a-zA-Z][a-zA-Z0-9]{5,}

???????????必須至少包含1個(gè)大寫字母

???????????不能都由小寫字母和數(shù)字組成: (?![a-z0-9]+$)

???????????必須至少包含1個(gè)數(shù)字

???????????不能都由小寫字母和大寫字母組成:

??????????? (?![a-zA-Z]+$)

6.特殊字符

  所謂特殊字符,就是一些有特殊含義的字符,如"*.txt"中的*,簡(jiǎn)單的說(shuō)就是表示任何字符串的意思。如果要查找文件名中有*的文件,則需要對(duì)*進(jìn)行轉(zhuǎn)義,即在其前加一個(gè)\。ls \*.txt。許多元字符要求在試圖匹配它們時(shí)特別對(duì)待。若要匹配這些特殊字符,必須首先使字符"轉(zhuǎn)義",即,將反斜杠字符 (\) 放在它們前面。下面列出了正則表達(dá)式中的特殊字符:(請(qǐng)注意在方括號(hào)中,不需要轉(zhuǎn)義字符。)

“$”------匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,請(qǐng)使用 \$。

“()”----標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置。子表達(dá)式可以獲取供以后使用。要匹配這些字符,請(qǐng)使用 \( 和 \)。

“*”----匹配前面的子表達(dá)式零次或多次。要匹配 * 字符,請(qǐng)使用 \*。

“+”-----匹配前面的子表達(dá)式一次或多次。要匹配 + 字符,請(qǐng)使用 \+。

“.”----匹配除換行符 \n之外的任何單字符。要匹配 .,請(qǐng)使用 \.。

“[”------標(biāo)記一個(gè)中括號(hào)表達(dá)式的開始。要匹配 [,請(qǐng)使用 \[。

“?”----匹配前面的子表達(dá)式零次或一次,或指明一個(gè)非貪婪限定符。要匹配 ? 字符,請(qǐng)使用 \?。

“\”----將下一個(gè)字符標(biāo)記為或特殊字符、或原義字符、或向后引用、或八進(jìn)制轉(zhuǎn)義符。例如, 'n' 匹配字符 'n'。'\n' 匹配換行符。序列 '\\' 匹配 "\",而 '\(' 則匹配 "(".

“^”-----匹配輸入字符串的開始位置,除非在方括號(hào)表達(dá)式中使用,此時(shí)它表示不接受該字符集合。要匹配 ^ 字符本身,請(qǐng)使用 \^。

“{”----標(biāo)記限定符表達(dá)式的開始。要匹配 {,請(qǐng)使用 \{。

“|”----指明兩項(xiàng)之間的一個(gè)選擇。要匹配 |,請(qǐng)使用 \|。

7.?貪婪模式和懶惰模式

???貪婪模式:默認(rèn)情況下,正則表達(dá)式會(huì)匹配最大的符合條件的字符串, *、+和?限定符都是貪婪的,因?yàn)樗鼈儠?huì)盡可能多的匹配文字,只有在它們的后面加上一個(gè)?就可以實(shí)現(xiàn)非貪婪或最小匹配。

???貪婪模式原因:(.*) (.+)

???懶惰模式:正則表達(dá)式僅匹配最小的符合規(guī)則的字符串

???比如:篩選網(wǎng)頁(yè)中的a元素:

??????<a\s+(.*)href\s*=\s*["']([^'"]*)["']

???貪婪模式-->懶惰模式:.*? ??

例如:

您可能搜索?HTML?文檔,以查找括在?H1?標(biāo)記內(nèi)的章節(jié)標(biāo)題。該文本在您的文檔中如下:

<h1> Chapter 1 - Introduction to Regular Expression</h1>

下面的表達(dá)式匹配從開始小于符號(hào)?(<)?到關(guān)閉?H1?標(biāo)記的大于符號(hào)?(>)?之間的所有內(nèi)容。

/<.*>/

如果您只需要匹配開始?H1?標(biāo)記,下面的"非貪心"表達(dá)式只匹配?<H1>。

/<.*?>/

通過(guò)在?*、+?或???限定符之后放置??,該表達(dá)式從"貪心"表達(dá)式轉(zhuǎn)換為"非貪心"表達(dá)式或者最小匹配。

?

三、常用正則表達(dá)式示例及說(shuō)明:

1.正則表達(dá)式驗(yàn)證控制文本框的輸入字符類型

1)只能輸入數(shù)字和英文的:?

<input οnkeyup="value=value.replace(/[\W]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text1" NAME="Text1">

2)只能輸入數(shù)字的:

<input οnkeyup="value=value.replace(/[^\d]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text2" NAME="Text2">

3)只能輸入全角的:?

<input οnkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" ID="Text3" NAME="Text3">

4)只能輸入漢字的:?

<input οnkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" ID="Text4" NAME="Text4">

2.正則表達(dá)式的應(yīng)用實(shí)例通俗說(shuō)明

*******************************************************************************

//校驗(yàn)是否全由數(shù)字組成

/^[0-9]{1,20}$/

^ 表示打頭的字符要匹配緊跟^后面的規(guī)則

$ 表示打頭的字符要匹配緊靠$前面的規(guī)則

[ ] 中的內(nèi)容是可選字符集

[0-9] 表示要求字符范圍在0-9之間

{1,20}表示數(shù)字字符串長(zhǎng)度合法為1到20,即為[0-9]中的字符出現(xiàn)次數(shù)的范圍是1到20次。
/^ 和 $/成對(duì)使用應(yīng)該是表示要求整個(gè)字符串完全匹配定義的規(guī)則,而不是只匹配字符串中的一個(gè)子串。
*******************************************************************************

//校驗(yàn)登錄名:只能輸入5-20個(gè)以字母開頭、可帶數(shù)字、“_”、“.”的字串

/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/

^[a-zA-Z]{1} 表示第一個(gè)字符要求是字母。

([a-zA-Z0-9]|[._]){4,19} 表示從第二位開始(因?yàn)樗o跟在上個(gè)表達(dá)式后面)的一個(gè)長(zhǎng)度為4到9位的字符串,它要求是由大小寫字母、數(shù)字或者特殊字符集[._]組成。

*******************************************************************************

//校驗(yàn)用戶姓名:只能輸入1-30個(gè)以字母開頭的字串

/^[a-zA-Z]{1,30}$/

*******************************************************************************

//校驗(yàn)密碼:只能輸入6-20個(gè)字母、數(shù)字、下劃線

/^(\w){6,20}$/

\w:用于匹配字母,數(shù)字或下劃線字符

*******************************************************************************

//校驗(yàn)普通電話、傳真號(hào)碼:可以“+”或數(shù)字開頭,可含有“-” 和 “ ”

/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/

\d:用于匹配從0到9的數(shù)字;

“?”元字符規(guī)定其前導(dǎo)對(duì)象必須在目標(biāo)對(duì)象中連續(xù)出現(xiàn)零次或一次

可以匹配的字符串如:+123 -999 999 ; +123-999 999 ;123 999 999 ;+123 999999等

*******************************************************************************

//校驗(yàn)URL

/^http[s]{0,1}:\/\/.+$/ 或 /^http[s]{0,1}:\/\/.{1,n}$/ (表示url串的長(zhǎng)度為length(“https://”) + n )

\ / :表示字符“/”。

. 表示所有字符的集

+ 等同于{1,},就是1到正無(wú)窮吧。

*************************************************************************

三、RegExp?對(duì)象和方法

在Javascript中,通過(guò)RegExp對(duì)象來(lái)支持正則表達(dá)式。創(chuàng)建正則表達(dá)式的方式有兩種:

1.最簡(jiǎn)單的創(chuàng)建正則表達(dá)式的方法:字面量形式

Var expression=/pattern/flags

其中pattern部分可以使任何簡(jiǎn)單的正則表達(dá)式

Flags表示正則表達(dá)式的標(biāo)志,正則表達(dá)式的匹配模式支持3個(gè)標(biāo)志:

1)”g”:表示全局(globle)模式,即模式被應(yīng)用于所有字符串,而非在發(fā)現(xiàn)第一個(gè)匹配項(xiàng)是立即停止。

2)“i”:表示不區(qū)分大小寫模式,即在確定匹配項(xiàng)是忽略模式于字符串的大小寫。

3)“m”:表示多行模式,即在到達(dá)一行文本末尾是還會(huì)繼續(xù)查找下一行中是否存在與模式匹配的項(xiàng)。例如:

/*匹配字符串中所有”at”的實(shí)例*/

Var paatern1=/at/g;

/*匹配第一個(gè)”bat”或”cat”,不區(qū)分大小寫*/

Var paatern2=/[bc]at/i;

/*匹配所有以”at”結(jié)尾的3個(gè)字符串的組合,不區(qū)分大小寫*/

Var paatern2=/.at/gi;

2.使用RegExp構(gòu)造函數(shù)創(chuàng)建正則表達(dá)式

Var expression=new Regexp([bc]at,i);

其中傳給RegExp構(gòu)造函數(shù)的兩個(gè)參數(shù)都是字符串(不能把正則表達(dá)式的字面量傳遞給RegExp構(gòu)造函數(shù)),也因此,在某些情況下要對(duì)字符進(jìn)行雙重轉(zhuǎn)義。所有的元字符都必須進(jìn)行雙重轉(zhuǎn)義。例如:

字面量模式:

/\[bc\]at/ ??/\.at/ ??/name\/age/ ??/\d.\d{1,2}/ ?/\w\\hello\\123/

等價(jià)的字符串形式:

“\\[bc\\]at”??“\\.at”??“name\\/age”??“\\d.\\d{1,2}”???“\\w\\\\hello\\\\123”

注意:使用正則表達(dá)式字面量和使用RegExp構(gòu)造函數(shù)創(chuàng)建的正則表達(dá)式不一樣,正則表達(dá)式字面量始終會(huì)共享同一個(gè)RegExp實(shí)例,而構(gòu)造函數(shù)創(chuàng)建的每一個(gè)新RegExp實(shí)例都是一個(gè)新實(shí)例(動(dòng)態(tài)創(chuàng)建的)。

3.Exec()?查找方法

Exec()接受一個(gè)參數(shù),即要應(yīng)用模式的字符串,然后返回包含第一個(gè)匹配項(xiàng)的信息的數(shù)組,如果沒有找到則返回null。返回的數(shù)組包含兩個(gè)屬性:index和input,index表示匹配項(xiàng)在字符串中的位置,input表示應(yīng)用正則表達(dá)式的字符串。

對(duì)于exec()而言即使在模式中設(shè)置了全局模式(g),它每次也只會(huì)返回一個(gè)匹配項(xiàng),但是如果設(shè)置了全局模式,每次調(diào)用它都會(huì)返回字符串中的下一個(gè)匹配項(xiàng),知道搜索到字符串的末尾為止。所以自全局匹配模式下,lastIndex的值在每次調(diào)用exec()后,都會(huì)增加,所以要想獲取所有的匹配項(xiàng)內(nèi)容和下標(biāo),需要循環(huán)獲取。而在非全局模式下lastIndex則始終不變。

4.test()驗(yàn)證方法

此方法要求驗(yàn)證的字符串和正則表達(dá)式從頭到尾完全匹配,需要”^”和”$”符號(hào)。

Reg.test(str):?如果匹配,返回true,否則返回false。Test()方法經(jīng)常被用在if語(yǔ)句中,經(jīng)常被用在驗(yàn)證用戶輸入的情況下,驗(yàn)證用戶輸入是不是有效。

例如:

Var text=”000-00-0000”;

Var pattern=/\d{3}-\d{2}-\d{4}/;

If(pattern.test(text)){

Atert(“the pattern was matched”);

}

原地址https://www.cnblogs.com/mingxiastory/p/5426913.html

轉(zhuǎn)載于:https://www.cnblogs.com/mlban/p/8405176.html

總結(jié)

以上是生活随笔為你收集整理的正则表达式知识详解(转自晴天碧日)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 爽爽窝窝午夜精品一区二区 | 800av免费在线观看 | 操她视频在线观看 | 色综合天天综合 | 网站在线免费观看 | 极品久久久久 | 欧美三级国产 | 国产视频在线看 | 韩国色网 | 毛片最新网址 | 国产巨乳在线观看 | 欧美巨乳在线观看 | 午夜电影福利网 | 精品一区免费观看 | 成人国产片 | 香蕉av一区 | 国产精品国产三级国产普通话蜜臀 | 亚洲成人91 | 中文无码一区二区三区在线观看 | 亚洲精品成人区在线观看 | 日韩精品国产AV | 爱爱动态图 | 日韩在线视频你懂的 | 国产粉嫩在线观看 | 亚洲麻豆一区 | 欧美影视一区二区 | 91福利在线播放 | 日日狠狠久久偷偷四色综合免费 | 国产又色又爽无遮挡免费动态图 | 一二三区在线观看 | av免费在线网站 | 精品一区二区三区国产 | av午夜天堂 | 在线成人播放 | 不卡视频一区二区 | 成人av电影免费观看 | 成年在线视频 | 国产成人在线视频网站 | 波多野结衣av中文字幕 | 精品一区二区三区成人免费视频 | 日韩美女毛片 | 日韩另类 | 欧美日韩免费一区 | 欧美一区二区影院 | 中文字幕在线不卡 | 国产视频第一区 | 欧美偷拍另类 | 天堂av2021| 国产精品一亚洲av日韩av欧 | 深夜福利视频网站 | 欧美成年人视频在线观看 | 一级大黄毛片 | 久久曰视频 | 肮脏的交易在线观看 | 日韩黄色av网站 | 欧美aaaaaaaaa| 欧美精品国产一区 | 亚洲黄色在线观看视频 | 久久精品久久久精品美女 | 中文字幕日韩一区 | 亚洲欧美午夜 | 久久久久国产视频 | 亚洲精品无码永久在线观看 | 永久久久久久久 | 中文文字幕一区二区三三 | 五月天视频 | 亚洲人视频在线观看 | 黑花全肉高h湿play短篇 | av影视在线观看 | 爱爱高潮视频 | 不卡久久| av大片在线看 | 狼人伊人av | 亚洲激情视频小说 | 无码任你躁久久久久久老妇 | 91精品在线免费观看 | 性生活视频播放 | 亚洲xx视频 | 国产成人高清在线 | 国产视频123区 | 1000部多毛熟女毛茸茸 | 4438x全国最大成人 | 日韩香蕉视频 | 91免费看| 日日躁夜夜躁白天躁晚上躁91 | 欧美一级久久久 | 中文字幕无产乱码 | 欧美日本色 | 韩国成人理伦片免费播放 | 一级免费黄色 | 一个人在线观看免费视频www | 亚洲一区免费视频 | 亚色在线视频 | 男人天堂资源 | 91精品国产综合久久国产大片 | 青娱乐最新视频 | 四虎免费在线观看 | 黄色一级大片 | 福利视频免费看 |