今天看一個(gè)教程中有寫(xiě)了一些正則表達(dá)式用法,里面主要講到了正則對(duì)字符的分割、匹配、查找、替換及一些入門(mén)知識(shí)與常用實(shí)例,所以整理過(guò)來(lái)與大家分享。
1.正則表達(dá)式的介紹和作用。
01.什么是正則表達(dá)式?
正則表達(dá)式(英語(yǔ):Regular Expression、regex或regexp,縮寫(xiě)為RE),也譯為正規(guī)表示法、常規(guī)表示法,在計(jì)算機(jī)科學(xué)中,是指一個(gè)用來(lái)描述或者匹配一系列符合某個(gè)句法規(guī)則的字符串的單個(gè)字符串。在很多文本編輯器或其他工具里,正則表達(dá)式通常被用來(lái)檢索和/或替換那些符合某個(gè)模式的文本內(nèi)容。許多程序設(shè)計(jì)語(yǔ)言都支持利用正則表達(dá)式進(jìn)行字符串操作。
規(guī)則語(yǔ)法
02.主要作用:分割、匹配、查找、替換。
表達(dá)式 匹配
/^s*$/ 匹配空行。
/d{2}-d{5}/ 驗(yàn)證由兩位數(shù)字、一個(gè)連字符再加 5 位數(shù)字組成的 ID 號(hào)。
/<s*(S+)(s[^>]*)?>[sS]*<s*/1s*>/ 匹配 HTML 標(biāo)記。
2.PHP中兩個(gè)常用的正則函數(shù)。
preg_match 正則函數(shù),以perl預(yù)言為基礎(chǔ)。(比較效率,需要自定義一個(gè)開(kāi)始結(jié)束符。)
ereg 正則函數(shù),以POSIX為基礎(chǔ)(Uniox、Script)。
3.正則表達(dá)式中包括的元素。
01.原子(普通字符:a-z A-Z 0-9、原子表、轉(zhuǎn)義字符)。
02.原子符(有特殊功能的字符)。
03.模式修正符(系統(tǒng)內(nèi)置部分模塊,類(lèi)似函數(shù))。
4.正則表達(dá)式中的“原子”.
01.a-z A-Z _ 0-9 //最常見(jiàn)的字符。
02.(abc) (skd) //用括號(hào)包含起來(lái)的單元符號(hào)。
03.[abcs] [^abd] //貪婪匹配,用方括號(hào)包含的源自表,原子表中^代表排除或者相反內(nèi)容。
04.轉(zhuǎn)義字符(區(qū)分大小寫(xiě))
d 包含所有數(shù)字 == [0-9]。
D 非包含所有數(shù)字 == [^0-9]。
w 包含所有英文字符 == [a-zA-Z_0-9]。
W 非包含所有英文字符&數(shù)字,用來(lái)匹配特殊符號(hào) == [^a-zA-Z_0-9]。
s 包含空白區(qū)域如回車(chē)、換行、分頁(yè)符 == [fnr]。
元字符
* 匹配前一個(gè)內(nèi)容的0次1次或多次
. 匹配內(nèi)容的0次1次或多次,但不包含回車(chē)換行
+ 匹配前一個(gè)內(nèi)容的1次或多次
?匹配前一個(gè)內(nèi)容的0次或1次
| 選擇匹配類(lèi)似PHP中的| (因?yàn)檫@個(gè)運(yùn)算符合是弱類(lèi)型導(dǎo)致前面最為整體匹配)
^ 匹配字符串首部?jī)?nèi)容
$ 匹配字符串尾部?jī)?nèi)容
b 匹配單詞邊界,邊界可以是空格或者特殊符合
B 匹配除帶單詞邊界意外內(nèi)容
{m} 匹配前一個(gè)內(nèi)容的重復(fù)次數(shù)為M次
{m,} 匹配前一個(gè)內(nèi)容的重復(fù)次數(shù)大于等于M次
{m,n} 匹配前一個(gè)內(nèi)容的重復(fù)次數(shù)M次到N次
( ) 合并整體匹配,并放入內(nèi)存,可使用1 2…依次獲取
實(shí)例代碼如下:
常用正則
* 1、 ^S+[a-z A-Z]$ 不能為空 不能有空格 只能是英文字母
* 2、 S{6,} 不能為空 六位以上
* 3、 ^d+$ 不能有空格 不能非數(shù)字
* 4、 (.*)(.jpg|.bmp)$ 只能是jpg和bmp格式
* 5、 ^d{4}-d{1,2}-d{1,2}$ 只能是2004-10-22格式
* 6、 ^0$ 至少選一項(xiàng)
* 7、 ^0{2,}$ 至少選兩項(xiàng)
* 8、 ^[s|S]{20,}$ 不能為空 二十字以上
* 9、 ^+?[a-z0-9](([-+.]|[_]+)?[a-z0-9]+)*@([a-z0-9]+(.|-))+[a-z]{2,6}$郵件
* 10、 w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*([,;]s*w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*)* 輸入多個(gè)地址用逗號(hào)或空格分隔郵件
* 11、 ^(([0-9]+))?[0-9]{7,8}$電話(huà)號(hào)碼7位或8位或前面有區(qū)號(hào)例如(022)87341628
* 12、 ^[a-z A-Z 0-9 _]+@[a-z A-Z 0-9 _]+(.[a-z A-Z 0-9 _]+)+(,[a-z A-Z 0-9 _]+@[a-z A-Z
0-9 _]+(.[a-z A-Z 0-9 _]+)+)*$
* 只能是字母、數(shù)字、下劃線;必須有@和.同時(shí)格式要規(guī)范 郵件
* 13 ^w+@w+(.w+)+(,w+@w+(.w+)+)*$上面表達(dá)式也可以寫(xiě)成這樣子,更精練。
14 ^w+((-w+)|(.w+))*@w+((.|-)w+)*.w+$ [/size]
匹配中文字符的正則表達(dá)式: [u4e00-u9fa5]
匹配特定數(shù)字:
^[1-9]d*$ //匹配正整數(shù)
^-[1-9]d*$ //匹配負(fù)整數(shù)
^-?[1-9]d*$ //匹配整數(shù)
^[1-9]d* |0$ //匹配非負(fù)整數(shù)(正整數(shù) + 0)
^-[1-9]d* |0$ //匹配非正整數(shù)(負(fù)整數(shù) + 0)
^[1-9]d*.d* |0.d*[1-9]d*$ //匹配正浮點(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* |0?.0+ |0)$ //匹配浮點(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)
由字母a~z(不區(qū)分大小寫(xiě))、數(shù)字0~9、減號(hào)或下劃線組成
只能以數(shù)字或字母開(kāi)頭和結(jié)尾 用戶(hù)名長(zhǎng)度為4~18個(gè)字符
實(shí)例代碼如下:
^[a-za-z0-9]{1}[a-za-z0-9|-|_]{2-16}[a-za-z0-9]{1}$
用戶(hù)名為大寫(xiě)字母小寫(xiě)字母或下劃線,并以字母開(kāi)頭,長(zhǎng)度為6-20
實(shí)例代碼如下:
^[a-za-z][wd_]{5,19}
用戶(hù)名:包括英文小寫(xiě)、漢字、數(shù)字、下劃線,不能全部是數(shù)字,下劃線不能在末尾
/^[a-z0-9_u4e00-u9fa5]+[^_]$/g
utf-8下
preg_match("/^[a-z0-9_x80-xff]+[^_]$/g",$a);
gbk下:
preg_match("/^[a-z0-9_".chr(0xa1)."-".chr(0xff)."]+[^_]$/",$a)
郵箱,實(shí)例代碼如下:
url地址,實(shí)例代碼如下: