目錄
1.概念
2. 為什么使用正則表達(dá)式?
3. 語法
1.普通字符
非打印字符
2. 特殊字符
3. 限定符
4. 定位符
5. 運(yùn)算優(yōu)先級(jí)
3.匹配規(guī)則
1. 基本模式匹配
2. 字符簇
3. 確定重復(fù)出現(xiàn)
1.概念
正則表達(dá)式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)
和特殊字符(稱為"元字符"),正則表達(dá)式使用單個(gè)字符串來描述、匹配一系列匹配某個(gè)句法規(guī)則的字符串。
2. 為什么使用正則表達(dá)式?
典型的搜索和替換操作要求您提供與預(yù)期的搜索結(jié)果匹配的確切文本,雖然這種技術(shù)對(duì)于對(duì)
靜態(tài)文本執(zhí)行簡(jiǎn)單搜索和替換任務(wù)可能已經(jīng)足夠了,但它缺乏靈活性,若采用這種方法搜索
動(dòng)態(tài)文本,即使不是不可能,至少也會(huì)變得很困難。
正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一
個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等
正則表達(dá)式可以靈活的匹配到 通用字符,它一般用在測(cè)試密碼框,賬號(hào)框等輸入框中的字符是否匹配。
3. 語法
正則表達(dá)式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為"元字符")組成的文字
模式
1.普通字符
普通字符包括大寫和小寫字母、所有數(shù)字、所有標(biāo)點(diǎn)符號(hào)以及非打印字符和一些其他符號(hào)。
非打印字符
?
2. 特殊字符
特殊字符就是一些有特殊含義的字符,如下
?
3. 限定符
+ 號(hào)代表前面的字符必須至少出現(xiàn)一次(1 次或多次)
sjp+,可以匹配 sjp、sjpp、sjppp等,
* 號(hào)代表前面的字符可以不出現(xiàn),也可以出現(xiàn)一次或者多次
sjp*,可以匹配sj、sjp、sjpp 等,(0 次、或 1 次、或多次)?
? 問號(hào)代表前面的字符最多只可以出現(xiàn)一次(0 次、或 1 次)??
sjp? 只能 匹配 sj 或者 sjp?
{n}, n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。
例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o
{n,},n 是一個(gè)非負(fù)整數(shù)。至少匹配 n 次
?o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價(jià)于'o+'。'o{0,}' 則等價(jià)于 'o*'。
{n,m},m 和 n 均為非負(fù)整數(shù),其中 n <= m。最少匹配 n 次且最多匹配 m 次?
最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配"fooooood" 中的前三個(gè) o
?
4. 定位符
注意:不能將限定符與定位符一起使用。由于在緊靠換行或者單詞邊界的前面或后面不能有
一個(gè)以上位置,因此不允許諸如 ^* 之類的表達(dá)式?
5. 運(yùn)算優(yōu)先級(jí)
正則表達(dá)式從左到右進(jìn)行計(jì)算,并遵循優(yōu)先級(jí)順序,這與算術(shù)表達(dá)式非常類似。
相同優(yōu)先級(jí)的從左到右進(jìn)行運(yùn)算,不同優(yōu)先級(jí)的運(yùn)算先高后低。下表從最高到最低說明了各
種正則表達(dá)式運(yùn)算符的優(yōu)先級(jí)順序:
?
3.匹配規(guī)則
1. 基本模式匹配
模式,是正則表達(dá)式最基本的元素,它們是一組描述字符串特征的字符。模式可以很簡(jiǎn)單,由普通的字符串組成,也可以非常復(fù)雜,往往用特殊的字符表示一個(gè)范圍內(nèi)的字符、重復(fù)出現(xiàn),或表示上下文。
- ^ 符號(hào)用來匹配那些以給定模式開頭的字符串
^once
/*
這個(gè)模式 包含一個(gè)特殊的字符^,表示該模式只匹配那些以 once 開頭的字符串。
例如 該模式與字符串"once upon a time"匹配,與"There once was a man from NewYork"
不匹配。正如如^符號(hào)表示開頭一樣.
*/
- $符號(hào)用來匹配那些以給定模式結(jié)尾的字符串
bucket$
/*
這個(gè)模式與"Who kept all of this cash in a bucket"匹配,與"buckets"不匹配。字符 ^ 和 $ 同
時(shí)使用時(shí),表示精確匹配(字符串與模式一樣)
*/
^bucket$
/*
這個(gè)模式只匹配字符串"bucket"
*/
如果一個(gè)模式不包括^和$,那么它與任何包含該模式的字符串匹配。
例如:
模式:once
字符串:There once was a man from NewYork,Who kept all of his cash in a bucket.? 匹配
2. 字符簇
正則表達(dá)式通常用來驗(yàn)證用戶的輸入。當(dāng)用戶提交一個(gè) 表單以后,要判斷輸入的電話號(hào)碼、地址、EMAIL 地址、信用卡號(hào)碼等是否有效,用普通的基于字面的字符是不夠的。 所以就需要用字符簇來表示。
要建立一個(gè)表示所有元音字符的字符簇,就把所有的元音字符放在一個(gè)方括號(hào)里:
[AaEeIiOoUu]
這個(gè)模式與任何元音字符匹配,但只能表示一個(gè)字符,用連字號(hào)可以表示一個(gè)字符的范圍:
[a-z] //匹配所有的小寫字母
[A-Z] //匹配所有的大寫字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的數(shù)字
[0-9\.\-] //匹配所有的數(shù)字,句號(hào)和減號(hào)
[ \f\r\t\n] //匹配所有的白字符
這些也只表示一個(gè)字符。如果要匹配一個(gè)由一個(gè)小寫字母和一位數(shù)字組成的字符串:
比如"z2"、"t6"或"g7",但不是"ab2"、"r2d3" 或"b52"的話,用這個(gè)
模式:
^[a-z][0-9]$
盡管[a-z]代表 26 個(gè)字母的范圍,但在這里它只能與第一個(gè)字符是小寫字母的字符串匹配。
上面提到^表示字符串的開頭,但它還有另外一個(gè)含義。當(dāng)在一組方括號(hào)里使用 ^ 時(shí),
它表示"非"或"排除"的意思,常常用來剔除某個(gè)字符?:
還用前面的例子,我們要求第一個(gè)字符不能是數(shù)字:
^[^0-9][0-9]$
這個(gè)模式與"&5"、"g7"及"-2"是匹配的,但與 "12"、"66" 是不匹配的。下面是幾個(gè)排除特定字
符的例子:
[^a-z] //除了小寫字母以外的所有字符
3. 確定重復(fù)出現(xiàn)
如果一個(gè)單詞有若干個(gè)字母組成,一組數(shù)字有若干個(gè)單數(shù)組成。跟在字符或字符簇后面的花括號(hào)({})用來確定前面的內(nèi)容的重復(fù)出現(xiàn)的次數(shù)
如下:
^a{4}$ // aaaa
^a{2,4}$ //aa aaa aaaa
^a{2,}$ // aa ,aaa aaa等多個(gè)a
^a{2,} //aardvark 和 aaab可以, apple不行
a{2,} //baad aaaa可以,但Nantucket不行
.{2} //匹配所有的兩個(gè)字符
\t{2} //兩個(gè)字表符
更多的單詞和數(shù)字的匹配:
^[a-zA-Z0-9_]{1,}$ // 所有包含一個(gè)以上的字母、數(shù)字或下劃線的字符串
^[1-9][0-9]{0,}$ // 所有的正整數(shù)
- [1-9] 表示 可以從中 1-9選中一個(gè)字符
- [0-9]{0,} 表示可以從0~9中選擇任意個(gè)字符。
^\-{0,1}[0-9]{1,}$ //所有整數(shù)
\-{0,1}:表示可以匹配0個(gè)或者1個(gè) " -" 符號(hào)文章來源:http://www.zghlxwxcb.cn/news/detail-566473.html
[0-9]{1,}:表示可以匹配1個(gè)以上的 0-9數(shù)字文章來源地址http://www.zghlxwxcb.cn/news/detail-566473.html
^\-?[0-9]{1,}\.?[0-9]{1,}$ //所有的浮點(diǎn)數(shù)
到了這里,關(guān)于正則表達(dá)式概念以及語法的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!