/…/ 代表一個模式的開始和結(jié)束
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束
(x) 匹配x保存x在名為$1...$9的變量中
x|y 匹配x或y
[xyz] 字符集(character set)温数,匹配這個集合中的任一一個字符(或元字符)
[^xyz] 不匹配這個集合中的任何一個字符
[\b] 匹配一個退格符
\b 匹配一個單詞的邊界
\B 匹配一個單詞的非邊界
\cX 這兒违寞,X是一個控制符滥搭,/\cM/匹配Ctrl-M
\n 匹配一個換行符
\r 匹配一個回車符
\t 匹配一個制表符
\v 匹配一個重直制表符
\s 任何空白字符
\S 任何非空白字符
\d 匹配一個數(shù)字字符,等價于[0-9]
\D 除了數(shù)字之外的任何字符吃度,等價于[^0-9]
\w 匹配一個數(shù)字楷力、下劃線或字母字符滑黔,等價于[A-Za-z0-9_]
\W 匹配一個不可以組成單詞的字符,如[\W]匹配"$5.98"中的$宵距,等于[^a-zA-Z0-9]腊尚。
. 除了換行符之外的任意字符
{n} 匹配前一項n次
{n,} 匹配前一項n次,或者多次
{n,m} 匹配前一項至少n次满哪,但是不能超過m次
* 匹配前一項0次或多次婿斥,等價于{0,}
+ 匹配前一項1次或多次,等價于{1,}
哨鸭? 匹配前一項0次或1次民宿,也就是說前一項是可選的,等價于{0,1}
"^\\d+$" //非負(fù)整數(shù)(正整數(shù) + 0)
"^[0-9]*[1-9][0-9]*$" //正整數(shù)
"^((-\\d+)|(0+))$" //非正整數(shù)(負(fù)整數(shù) + 0)
"^-[0-9]*[1-9][0-9]*$" //負(fù)整數(shù)
"^-?\\d+$" //整數(shù)
"^\\d+(\\.\\d+)?$" //非負(fù)浮點數(shù)(正浮點數(shù) + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數(shù)
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$" //非正浮點數(shù)(負(fù)浮點數(shù) + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負(fù)浮點數(shù)
"^(-?\\d+)(\\.\\d+)?$" //浮點數(shù)
"^[A-Za-z]+$" //由26個英文字母組成的字符串
"^[A-Z]+$" //由26個英文字母的大寫組成的字符串
"^[a-z]+$" //由26個英文字母的小寫組成的字符串
"^[A-Za-z0-9]+$" //由數(shù)字和26個英文字母組成的字符串
"^\\w+$" //由數(shù)字像鸡、26個英文字母或者下劃線組成的字符串
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$" //email地址
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$" //url
字符?
意義:匹配?前面的字符0次或1次活鹰。
例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。
var reg=/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/;
//(?![0-9]+$) 不能是純數(shù)字 , 限制 志群,不占位
// ?! 開頭不能只是拼接數(shù)字結(jié)尾
// 開始位置開始算起 着绷, $是一個結(jié)尾位置
//(?![0-9]+$)就是修飾不能是純數(shù)字
// 斷言此位置后,字符串結(jié)尾之前赖舟,所有的字符不能全部由數(shù)字([^a-zA-Z]表示非英文字母蓬戚,結(jié)合下文,這里匹配數(shù)字)組成宾抓。
// [0-9]+ 是純數(shù)字
// ?! 不能以后邊的這些開始子漩。
//(?![a-zA-Z]+$) 不能是純字母 , 限制石洗,不占位
//[0-9A-Za-z]{6,20} 6-20位的字符
var reg=/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
2.查找子串在父串中的位置
>>> re.search(r'shuage','i love shuage!!')
<_sre.SRE_Match object; span=(7, 13), match='shuage'>
2.查找父串中所有的子串幢泼,返回一個數(shù)組
>>> re.findall(r'[a-z]','ShuaiGe')
['h', 'u', 'a', 'i', 'e']
3.綜合整理
. 點(.)代表任意字符
\. 匹配點(.)
\d 配置所有的數(shù)字
[] 匹配[]里面任何一個字符
{} 前邊要匹配的字符要顯示多少次
| 邏輯或
() 表示分組
^ 以字符串開頭
$ 以字符串結(jié)尾
\ 把元字符變?yōu)槠胀ㄗ址哑胀ㄗ址優(yōu)樘厥庾址齖d
\數(shù)字 例如\1表示第一組(小括號里面的正則)再重復(fù)一次讲衫,\2表示第二組再重復(fù)一次
舉例: (shuage)\1 == shuageshuage (shuage)(hao)\2 == shuagehaohao
如果以0開頭缕棵,或者3個數(shù)字的長度,那么不會被用于引用對應(yīng)的子組涉兽,而是用于匹配八進(jìn)制數(shù)字所表示的ASCII碼值對應(yīng)的字符
[.] 匹配.
[\] 會報錯招驴,\ 在[]中表示轉(zhuǎn)意符
[\n] 表示回車
[^a-z] 表示除了a-z以外的都匹配,^表示取反
[a-z^] 表示^本身
* 表示匹配前面的子表達(dá)式零次或多次枷畏,等價于{0,}
+ 表示匹配前面的子表達(dá)式一次或多次别厘,等價于{1,}
? 表示匹配前面的子表達(dá)式零次或1次,等價于{0,1}
正則默認(rèn)是貪婪模式拥诡,啟用非貪婪模式方法:在重復(fù)后面加上?就可以了触趴。
\b 表示匹配一個單詞的邊界,被定義為Unidcode的字母數(shù)字或者下橫線字符也被認(rèn)為是一個單詞的一部分 .()!屬于單詞的邊界
\B 表示匹配非單詞邊界,其實就是跟上邊的相反
\D 表示匹配跟\d相反的字符
\s 表示匹配空白字符渴肉,例如 \t(制表符)\n(空格)\r(回車)\f(換頁)\v(表示垂直的tab鍵)
\S 表示與\s相反
\w 表示匹配單詞字符
\W 表示與\w相反
4.正則說明
[a-z] 匹配所有的小寫字母
[0-9] 匹配所有的數(shù)字
3{3} 3個3 大括號前邊這個字符是多少個
3{3,10} 3-10個3 大括號前邊這個字符是多少個
5.案例
匹配(0-255):[01]\d\d|2[0-4]\d|25[0-5] 按照每位來匹配
匹配ip :(([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.){3}([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})
解釋:
([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1}) : ()小括號里面的是一個完整部分冗懦,匹配(0-255)
(([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.) : 最外邊小括號是一個完整部分,匹配(0-255).
(([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.){3} : 表示前邊的小括號執(zhí)行3次
正則默認(rèn)貪婪模式
>>> s = '<html><title> i love shuage </title></html>'
>>> re.search(r'<.+>',s)
<_sre.SRE_Match object; span=(0, 43), match='<html><title> i love shuage </title></html>'>
啟用非貪婪模式
>>> s = '<html><title> i love shuage </title></html>'
>>> re.search(r'<.+?>',s)
<_sre.SRE_Match object; span=(0, 6), match='<html>'>
6.編譯正則表達(dá)式 -- 成模塊級別 --有6種編譯模式
>>> p = re.compile(r'[A-Z]')
>>> p.search('I love ShuaGe')
<_sre.SRE_Match object; span=(0, 1), match='I'>
>>> p.findall('I love ShuaGe')
['I', 'S', 'G']