正則表達(dá)式基礎(chǔ)學(xué)習(xí)一文入門(mén)
正則表達(dá)式是什么
校驗(yàn)數(shù)據(jù)的有效性、查找符合要求的文本以及對(duì)文本進(jìn)行切割和替換等操作。正則表達(dá)式的目的是真正的強(qiáng)大之處就在于可以查找符合某個(gè)規(guī)則的文本。
元字符
1.特殊字符串
- . 除換行符外任意字符
- \d 表示任意單個(gè)數(shù)字
- \w 表示任意單個(gè)數(shù)字或字母或下劃線(xiàn)
- \s 表示任意單個(gè)空白符
\D \W \S,意思正相反。
2.空白符
- \r 回車(chē)符
- \n 換行符
- \f 換頁(yè)符
- \t 制表符
- \v 垂直制表符
- \s 任意空白符
3.量詞
- * 代表0次到多次
- + 1次到多次
- ? 0到1次
- {m} 出現(xiàn)m次
- {m,} 出現(xiàn)至少m次
- {m,n} m到n次
4.范圍
- |或 ,如
ab|bc
代表ab或bc - [...] 多選一,括號(hào)中任意單個(gè)元素
- [a-z] 匹配a-z之間任意單個(gè)元素
- [^..] 取反,不能包括括號(hào)中的任意單個(gè)元素
貪婪匹配、非貪婪匹配和獨(dú)占模式
- 貪婪模式的特點(diǎn)就是盡可能進(jìn)行最大長(zhǎng)度匹配
- 非貪婪模式會(huì)盡可能短地去匹配。
- 獨(dú)占模式和貪婪模式很像,獨(dú)占模式會(huì)盡可能多地去匹配,如果匹配失敗就結(jié)束,不會(huì)進(jìn)行回溯,這樣的話(huà)就比較節(jié)省時(shí)間。具體的方法就是在量詞后面加上加號(hào)(+),例如
xy{1,3}+yz
注意: Python 和 Go 的標(biāo)準(zhǔn)庫(kù)目前都不支持獨(dú)占模式。
(“.+?”)|\w{2,6}
分組和引用
如圖所示的正則,將日期和時(shí)間都括號(hào)括起來(lái)。這個(gè)正則中一共有兩個(gè)分組,日期是第 1 個(gè),時(shí)間是第 2 個(gè)。
1.不保存子組
分組的作用就是后續(xù)可能還會(huì)被引用到,但是如果不需要引用的時(shí)候可以添加不保存子組,表達(dá)式(?:xxx)
,優(yōu)點(diǎn)是正則性能會(huì)更好,在子組計(jì)數(shù)時(shí)也更不容易出錯(cuò)。
2.括號(hào)嵌套
四種匹配模式
1.不區(qū)分大小寫(xiě)模式(Case-Insensitive)
不區(qū)分大小寫(xiě)模式,正則表達(dá)式(?i)cat
,這樣匹配的字符就不區(qū)分大小寫(xiě)了
如果我們想要前面匹配上的結(jié)果,和第二次重復(fù)時(shí)的大小寫(xiě)一致,那該怎么做呢?我們只需要用括號(hào)把修飾符和正則 cat 部分括起來(lái),加括號(hào)相當(dāng)于作用范圍的限定,讓不區(qū)分大小寫(xiě)只作用于這個(gè)括號(hào)里的內(nèi)容。正則表達(dá)式((?i)cat)
2.點(diǎn)號(hào)通配模式(Dot All)
元字符里講.
可以匹配除了換行以外的任何元素,用單行模式中使用.
,正則表示式(?s).
3.多行匹配模式
多行模式的表達(dá)式(?m)^...|...$
,這樣的匹配好處是每一行
4.注釋模式
略...
斷言
斷言是指對(duì)匹配到的文本位置有要求。
1.單詞邊界
在準(zhǔn)確匹配單詞時(shí),我們使用 \b...\b
就可以實(shí)現(xiàn)了,也可以指定表達(dá)式的開(kāi)頭和結(jié)尾^...$
2.環(huán)視
環(huán)視的主要是定義清晰的邊界。
(?<=Y)
,左邊是Y(?<=!Y)
,左邊不是Y(?=Y)
,右邊是Y(?!Y)
,右邊不是Y
左尖括號(hào)代表看左邊,沒(méi)有尖括號(hào)是看右邊,感嘆號(hào)是非的意思。
常用正則Demo
正則表達(dá)式用于字符串處理、表單驗(yàn)證等場(chǎng)合,實(shí)用高效?,F(xiàn)將一些常用的表達(dá)式收集于此,以備不時(shí)之需。
- 匹配中文字符的正則表達(dá)式:
[u4e00-u9fa5]
- 匹配雙字節(jié)字符(包括漢字在內(nèi)):
[^x00-xff]
- 匹配空白行的正則表達(dá)式:ns*r
- 匹配HTML標(biāo)記的正則表達(dá)式:
<(S*?)[^>]*>.*?|<.*? />
- 匹配首尾空白字符的正則表達(dá)式:
^s*|s*$
- 匹配Email地址的正則表達(dá)式:
w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
- 匹配網(wǎng)址URL的正則表達(dá)式:
[a-zA-z]+://[^s]*
- 匹配帳號(hào)是否合法(字母開(kāi)頭,允許5-16字節(jié),允許字母數(shù)字下劃線(xiàn)):
^[a-zA-Z][a-zA-Z0-9_]{4,15}$
- 匹配國(guó)內(nèi)電話(huà)號(hào)碼:
d{3}-d{8}|d{4}-d{7}
( 匹配形式如 0511-4405222 或 021-87888822) - 匹配中國(guó)郵政編碼:
[1-9]d{5}(?!d)
- 匹配身份證:
d{15}|d{18}
2.匹配特定數(shù)字:
- 匹配正整數(shù)
^[1-9]d*$
- 匹配負(fù)整數(shù)
^-[1-9]d*$
- 匹配整數(shù)
^-?[1-9]d*$
- 匹配非負(fù)整數(shù)(正整數(shù) + 0)
^[1-9]d*|0$
- 匹配非正整數(shù)(負(fù)整數(shù) + 0)
^-[1-9]d*|0$
- 匹配正浮點(diǎn)數(shù)
^[1-9]d*.d*|0.d*[1-9]d*$
- 匹配負(fù)浮點(diǎn)數(shù)
^-([1-9]d*.d*|0.d*[1-9]d*)$
- 匹配浮點(diǎn)數(shù)
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$
- 匹配非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) +0)
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$
- 匹配非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$
3.匹配特定字符串:
- 匹配由26個(gè)英文字母組成的字符串
^[A-Za-z]+$
- 匹配由26個(gè)英文字母的大寫(xiě)組成的字符串
^[A-Z]+$
- 匹配由26個(gè)英文字母的小寫(xiě)組成的字符串
^[a-z]+$
- 匹配由數(shù)字和26個(gè)英文字母組成的字符串
^[A-Za-z0-9]+$
- 匹配由數(shù)字、26個(gè)英文字母或者下劃線(xiàn)組成的字符串
^w+$
- 只能輸入數(shù)字:
^[0-9]*$
- 只能輸入n位的數(shù)字:
^d{n}$
- 只能輸入至少n位數(shù)字:
^d{n,}$
- 只能輸入m-n位的數(shù)字:
^d{m,n}$
- 只能輸入零和非零開(kāi)頭的數(shù)字:
^(0|[1-9][0-9]*)$
- 只能輸入有兩位小數(shù)的正實(shí)數(shù):
^[0-9]+(.[0-9]{2})?$
- 只能輸入有1-3位小數(shù)的正實(shí)數(shù):
^[0-9]+(.[0-9]{1,3})?$
- 只能輸入非零的正整數(shù):
^+?[1-9][0-9]*$
- 只能輸入非零的負(fù)整數(shù):
^-[1-9][0-9]*$
- 只能輸入長(zhǎng)度為3的字符:
^.{3}$
- 只能輸入由26個(gè)英文字母組成的字符串:
^[A-Za-z]+$
- 只能輸入由26個(gè)大寫(xiě)英文字母組成的字符串:
^[A-Z]+$
- 只能輸入由26個(gè)小寫(xiě)英文字母組成的字符串:
^[a-z]+$
- 只能輸入由數(shù)字和26個(gè)英文字母組成的字符串:
^[A-Za-z0-9]+$
- 只能輸入由數(shù)字、26個(gè)英文字母或者下劃線(xiàn)組成的字符串:
^w+$
- 驗(yàn)證用戶(hù)密碼:
^[a-zA-Z]w{5,17}$
正確格式為:以字母開(kāi)頭,長(zhǎng)度在6-18之間, - 只能包含字符、數(shù)字和下劃線(xiàn)。
- 驗(yàn)證是否含有^%&'',;=?"等字符:`[^%&'',;=?x22]+`
- 只能輸入漢字:
^[u4e00-u9fa5],{0,}$
- 驗(yàn)證Email地址:
^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
- 驗(yàn)證InternetURL:
^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$
- 驗(yàn)證電話(huà)號(hào)碼:
^((d{3,4})|d{3,4}-)?d{7,8}$
以上就是正則表達(dá)式基礎(chǔ)學(xué)習(xí)一文入門(mén)的詳細(xì)內(nèi)容,更多關(guān)于正則表達(dá)式基礎(chǔ)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
正則表達(dá)式匹配閉合HTML標(biāo)簽(支持嵌套)
先確定我們要解決的問(wèn)題——從一段Html文本中找出特定id的標(biāo)簽的innerHTML,需要的朋友可以參考下2020-02-02linux grep不區(qū)分大小寫(xiě)查找字符串方法
這篇文章主要介紹了linux grep不區(qū)分大小寫(xiě)查找字符串方法,需要的朋友可以參考下2020-03-03用js實(shí)現(xiàn)過(guò)濾script的正則
今日研究discuz的代碼,發(fā)現(xiàn)個(gè)不錯(cuò)的正則代碼,基本上簡(jiǎn)單2008-05-05AS3 js正則表達(dá)式 反向引用(backreference)
這篇文章主要介紹了AS3 js正則表達(dá)式 反向引用(backreference) 的相關(guān)資料,需要的朋友可以參考下2016-03-03正則表達(dá)式中不區(qū)分大小寫(xiě)的寫(xiě)法
這篇文章主要介紹了正則表達(dá)式中不區(qū)分大小寫(xiě)的寫(xiě)法,本文講解如何在正則表達(dá)式中忽略大小寫(xiě) ,需要的朋友可以參考下2015-04-04