正則表達(dá)式之字符串模式匹配實(shí)例詳解
前言
今天我們來學(xué)習(xí)正則表達(dá)式,正則表達(dá)式的應(yīng)用十分廣泛,幾乎每個(gè)涉及到交互的項(xiàng)目都會(huì)用到的,學(xué)會(huì)正則表達(dá)式之后會(huì)讓你除了提高效率外,會(huì)給你帶來絕對(duì)的成就感。
接下來我們正式開始!
什么是正則表達(dá)式
正則表達(dá)式是檢查、匹配字符串的表達(dá)式
正則表達(dá)式用來描述某種規(guī)則,同時(shí)它不是某種語言專有的技術(shù),它對(duì)主流的語言都有良好的支持。
正則表達(dá)式的主要使用場(chǎng)景是:字符串檢驗(yàn),查找與替換。
示例:檢查輸入身份證號(hào)是否合法的正則表達(dá)式
正則表達(dá)式:(^\d{18}$)|(^\d{17}(\d|X|x)$)
現(xiàn)在你也許看不懂,但是等看完這篇博客之后在加以練習(xí)你就能輕松寫出來了。
字符范圍匹配
下面這個(gè)表是對(duì)單個(gè)字符約束的一些正則表達(dá)式:
正則表達(dá)式 | 說明 |
---|---|
A | 精準(zhǔn)匹配單個(gè)字符 |
x|y | 允許出現(xiàn)的2個(gè)字符 |
[xyz] | 字符集合,允許出現(xiàn)的2個(gè)字符 |
[a-z] | 字符集合 |
[^xyz] | 集合內(nèi)字符不允許出現(xiàn) |
例如:匹配數(shù)字范圍(0570-0579)
正則表達(dá)式為:057[0-9]
元字符
用于匹配的特殊符號(hào)又稱作元字符
常用的元字符如下:
正則表達(dá)式 | 說明 |
---|---|
\d | 匹配任意單個(gè)數(shù)字 |
\D | 匹配\d規(guī)則以外的任意單個(gè)字符 |
\w | 匹配任意單個(gè)數(shù)字字母下劃線 |
\W | 匹配\w規(guī)則以外的任意單個(gè)字符 |
\s | 匹配單個(gè)空格 |
\n | 匹配單個(gè)換行符 |
. | 匹配任意單個(gè)字符(換行符除外) |
\. | 特殊字符只匹配. |
示例:請(qǐng)匹配杭州與寧波座機(jī)號(hào)碼(0571|0574-XXXXXXXX)
正則表達(dá)式為:057[14]-\d\d\d\d\d\d\d\d
多次重復(fù)匹配
當(dāng)我們匹配的字符串比較長,比如身份證號(hào)有18為一個(gè)一個(gè)寫\d比較麻煩,多次重復(fù)匹配只能簡化我們的操作。
常用的多次重復(fù)匹配如下:
正則表達(dá)式 | 說明 |
---|---|
A{N} | 精準(zhǔn)N次匹配 |
A{N,} | 最少出現(xiàn)N次 |
\d{N,M} | 最少可以出現(xiàn)N次,最多可以出現(xiàn)M次 |
\d* | 可以出現(xiàn)零次至無限次 |
\d+ | 最少出現(xiàn)一次,相當(dāng)于{1,} |
\d? | 最多出現(xiàn)1次,相當(dāng)于{0,1} |
示例:匹配全國的座機(jī)號(hào)(區(qū)號(hào)3或4位-電話號(hào)碼7或8位)
正則表達(dá)式:\d{3,4}-\d{7,8}
定位匹配
正則表達(dá)式 | 說明 |
---|---|
^A.* | 頭匹配-以字符A開頭 |
.*A$ | 尾匹配-以字符A結(jié)尾 |
^A.*A$ | 全字匹配-以字符A開頭結(jié)尾 |
示例:以C開頭,B結(jié)尾的字符串
正則表達(dá)式:^C.*B$
貪婪模式與非貪婪模式
貪婪模式:在滿足條件的情況下盡可能多匹配到字符串
非貪婪模式:在滿足條件的情況下盡可能少匹配到字符串
正則表達(dá)式在默認(rèn)的情況下就是貪婪模式
示例:輸入123456
- 在使用正則表達(dá)式\d{4,5},之后匹配到的是12345,可見這就是貪婪模式。
- 在使用正則表達(dá)式\d{4,5}?,之后匹配到的是1234,可見這就是非貪婪模式。
可見,只需要在正則表達(dá)式的后面加一個(gè)?,就可以從貪婪模式變換到非貪婪模式。
表達(dá)式分組
分組就是將正則分組為多個(gè)子表達(dá)式。
示例:abababcdcdcd
正則表達(dá)式:(ab){3}(cd){3}
示例:檢查輸入身份證號(hào)是否合法的正則表達(dá)式
正則表達(dá)式:(^\d{18}$)|(^\d{17}(\d|X|x)$)
結(jié)合JavaScript練習(xí)正則表達(dá)式
在JS中定義正則表達(dá)式對(duì)象只需要在//之間書寫正則表達(dá)式即可
我們實(shí)現(xiàn)用表單來驗(yàn)證輸入姓名和身份證號(hào)是否合法。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="#" method="post" id ="frmInfo"> <div id="err" style="color:red"> </div> <div> 姓名:<input id="name" name="name"/> </div> <div> 身份證:<input id ="idno" name="idno"/> </div> <div> <input type = "submit"/> </div> </form> <script type="text/javascript"> document.getElementById("frmInfo").onsubmit = function(){ //漢字范圍\u4e00-\u9fa5 var regex1 = /^[\u4e00-\u9fa5]{2,8}$/; var regex2 = /^[1234568]\d{16}[0-9xX]$/; var name = document.getElementById("name").value; var idno = document.getElementById("idno").value; //利用正則表達(dá)式進(jìn)行匹配,true-匹配,false-失敗 if(regex1.test(name) == false){ document.getElementById("err").innerHTML = "無效姓名"; return false; }else if(regex2.test(idno) == false){ document.getElementById("err").innerHTML = "無效身份證號(hào)"; return false; }else{ alert("驗(yàn)證通過,準(zhǔn)備提交!"); return true; } } </script> </body> </html>
輸出:
結(jié)語
多加練習(xí)之后,書寫起來還是比較簡單的。而且很有成就感。加油!
到此這篇關(guān)于正則表達(dá)式之字符串模式匹配的文章就介紹到這了,更多相關(guān)正則表達(dá)式字符串模式匹配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
[a] 1 [/a]轉(zhuǎn)換為網(wǎng)址的UBB的正則
[a] 1 [/a]轉(zhuǎn)換為網(wǎng)址的UBB的正則...2007-11-11最全的常用正則表達(dá)式大全——包括校驗(yàn)數(shù)字、字符、一些特殊的需求等
很多不太懂正則的朋友,在遇到需要用正則校驗(yàn)數(shù)據(jù)時(shí),往往是在網(wǎng)上去找很久,結(jié)果找來的還是不很符合要求。所以我最近把開發(fā)中常用的一些正則表達(dá)式整理了一下,在這里分享一下。給自己留個(gè)底,也給朋友們做個(gè)參考。2015-09-09正則表達(dá)式驗(yàn)證IPV4地址功能實(shí)例分析
這篇文章主要介紹了正則表達(dá)式驗(yàn)證IPV4地址功能,結(jié)合實(shí)例形式分析了IPV4地址驗(yàn)證的原理及具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-01-01python 正則表達(dá)式 re.sub & re.subn
正則表達(dá)式一個(gè)比較常見的用途是找到所有模式匹配的字符串并用不同的字符串來替換它們。sub方法提供一個(gè)替換值,可以是字符串或函數(shù),和一個(gè)要被處理的字符串。這篇文章主要介紹了python 正則表達(dá)式 re.sub & re.subn,需要的朋友可以參考下2017-12-12JavaScript正則表達(dá)式校驗(yàn)非正整數(shù)實(shí)例
本文分享了js正則表達(dá)式(^((-\d+)|(0+))$)校驗(yàn)非正整數(shù)實(shí)例代碼,代碼簡單易懂,需要的朋友可以看下2016-12-12正則表達(dá)式中的反向預(yù)搜索實(shí)現(xiàn)
這幾天在用正則表達(dá)式做一個(gè)小程序,需要替換內(nèi)容中的某些特殊字符串。這些字符串的出現(xiàn)是有規(guī)律的,那就是在它左面總會(huì)特定的內(nèi)容出現(xiàn),右面卻沒有。于是自然就想到了反向預(yù)搜索。2009-09-09