工具:正則表達(dá)式可視化
正則表達(dá)式基本語法
兩個(gè)特殊的符號(hào)'^'和'$'辉浦。他們的作用是分別指出一個(gè)字符串的開始和結(jié)束冯痢。例子如下:
"^The":表示所有以"The"開始的字符串("There"野芒,"The cat"等);
"of despair$":表示所以以"of despair"結(jié)尾的字符串娶桦;
"^abc$":表示開始和結(jié)尾都是"abc"的字符串——呵呵贾节,只有"abc"自己了;
"notice":表示任何包含"notice"的字符串衷畦。
像最后那個(gè)例子栗涂,如果你不使用兩個(gè)特殊字符,你就在表示要查找的串在被查找串的任意部分——你并不把它定位在某一個(gè)頂端祈争。
其它還有'*'斤程,'+'和'?'這三個(gè)符號(hào),表示一個(gè)或一序列字符重復(fù)出現(xiàn)的次數(shù)铛嘱。它們分別表示“沒有或更多”暖释,“一次或更多”還有“沒有或一次”。下面是幾個(gè)例子:
"ab*":表示一個(gè)字符串有一個(gè)a后面跟著零個(gè)或若干個(gè)b墨吓。("a", "ab", "abbb",……)球匕;
"ab+":表示一個(gè)字符串有一個(gè)a后面跟著至少一個(gè)b或者更多;
"ab?":表示一個(gè)字符串有一個(gè)a后面跟著零個(gè)或者一個(gè)b帖烘;
"a?b+$":表示在字符串的末尾有零個(gè)或一個(gè)a跟著一個(gè)或幾個(gè)b亮曹。
你也可以使用范圍,用大括號(hào)括起,用以表示重復(fù)次數(shù)的范圍照卦。
"ab{2}":表示一個(gè)字符串有一個(gè)a跟著2個(gè)b("abb")式矫;
"ab{2,}":表示一個(gè)字符串有一個(gè)a跟著至少2個(gè)b;
"ab{3,5}":表示一個(gè)字符串有一個(gè)a跟著3到5個(gè)b役耕。
請(qǐng)注意采转,你必須指定范圍的下限(如:"{0,2}"而不是"{,2}")。還有瞬痘,你可能注意到了故慈,'*','+'和
'?'相當(dāng)于"{0,}"框全,"{1,}"和"{0,1}"察绷。
還有一個(gè)':',表示“或”操作:
"hi:hello":表示一個(gè)字符串里有"hi"或者"hello"津辩;
"(b:cd)ef":表示"bef"或"cdef"拆撼;
"(a:b)*c":表示一串"a""b"混合的字符串后面跟一個(gè)"c";
'.'可以替代任何字符:
"a.[0-9]":表示一個(gè)字符串有一個(gè)"a"后面跟著一個(gè)任意字符和一個(gè)數(shù)字喘沿;
"^.{3}$":表示有任意三個(gè)字符的字符串(長(zhǎng)度為3個(gè)字符)闸度;
方括號(hào)表示某些字符允許在一個(gè)字符串中的某一特定位置出現(xiàn):
"[ab]":表示一個(gè)字符串有一個(gè)"a"或"b"(相當(dāng)于"a|b");
"[a-d]":表示一個(gè)字符串包含小寫的'a'到'd'中的一個(gè)(相當(dāng)于"a|b|c|d"或者"[abcd]")摹恨;
"^[a-zA-Z]":表示一個(gè)以字母開頭的字符串筋岛;
"[0-9]%":表示一個(gè)百分號(hào)前有一位的數(shù)字;
",[a-zA-Z0-9]$":表示一個(gè)字符串以一個(gè)逗號(hào)后面跟著一個(gè)字母或數(shù)字結(jié)束晒哄。
你也可以在方括號(hào)里用''表示不希望出現(xiàn)的字符,''應(yīng)在方括號(hào)里的第一位肪获。(如:"%[^a-zA-Z]%"表
示兩個(gè)百分號(hào)中不應(yīng)該出現(xiàn)字母)寝凌。
為了逐字表達(dá),你必須在"^.$():*+?{"這些字符前加上轉(zhuǎn)移字符''孝赫。
請(qǐng)注意在方括號(hào)中较木,不需要轉(zhuǎn)義字符。
正則表達(dá)式的應(yīng)用實(shí)例通俗說明
//校驗(yàn)是否全由數(shù)字組成
/^[0-9]{1,20}$/
^ 表示打頭的字符要匹配緊跟^后面的規(guī)則
$ 表示打頭的字符要匹配緊靠$前面的規(guī)則
[ ] 中的內(nèi)容是可選字符集
[0-9] 表示要求字符范圍在0-9之間
{1,20}表示數(shù)字字符串長(zhǎng)度合法為1到20青柄,即為[0-9]中的字符出現(xiàn)次數(shù)的范圍是1到20次伐债。
/^ 和 $/成對(duì)使用應(yīng)該是表示要求整個(gè)字符串完全匹配定義的規(guī)則,而不是只匹配字符串中的一個(gè)子串致开。
//校驗(yàn)登錄名:只能輸入5-20個(gè)以字母開頭峰锁、可帶數(shù)字、“_”双戳、“.”的字串
/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/
^[a-zA-Z]{1} 表示第一個(gè)字符要求是字母虹蒋。
([a-zA-Z0-9]|[._]){4,19} 表示從第二位開始(因?yàn)樗o跟在上個(gè)表達(dá)式后面)的一個(gè)長(zhǎng)度為4到19位的字符串,它要求是由大小寫字母、數(shù)字或者特殊字符集[._]組成魄衅。
//校驗(yàn)用戶姓名:只能輸入1-30個(gè)以字母開頭的字串
/^[a-zA-Z]{1,30}$/
//校驗(yàn)密碼:只能輸入6-20個(gè)字母峭竣、數(shù)字、下劃線
/^(\w){6,20}$/
\w:用于匹配字母晃虫,數(shù)字或下劃線字符
//校驗(yàn)普通電話皆撩、傳真號(hào)碼:可以“+”或數(shù)字開頭,可含有“-” 和 “ ”
/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/
\d:用于匹配從0到9的數(shù)字哲银;
“?”元字符規(guī)定其前導(dǎo)對(duì)象必須在目標(biāo)對(duì)象中連續(xù)出現(xiàn)零次或一次
可以匹配的字符串如:+123 -999 999 毅访; +123-999 999 ;123 999 999 盘榨;+123 999999等
//校驗(yàn)URL
/^http[s]{0,1}:\/\/.+$/ 或 /^http[s]{0,1}:\/\/.{1,n}$/ (表示url串的長(zhǎng)度為length(“https://”) + n )
\ / :表示字符“/”喻粹。
. 表示所有字符的集
+ 等同于{1,},就是1到正無窮吧草巡。
正則表達(dá)式的應(yīng)用
"^\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ù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點(diǎn)數(shù)
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(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ù)浮點(diǎn)數(shù)
"^(-?\d+)(\.\d+)?$" //浮點(diǎn)數(shù)
"^[A-Za-z]+$" //由26個(gè)英文字母組成的字符串
"^[A-Z]+$" //由26個(gè)英文字母的大寫組成的字符串
"^[a-z]+$" //由26個(gè)英文字母的小寫組成的字符串
"^[A-Za-z0-9]+$" //由數(shù)字和26個(gè)英文字母組成的字符串
"^\w+$" //由數(shù)字守呜、26個(gè)英文字母或者下劃線組成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //電話號(hào)碼
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址
^([0-9A-F]{2})(-[0-9A-F]{2}){5}$ //MAC地址的正則表達(dá)式
^[-+]?\d+(\.\d+)?$ //值類型正則表達(dá)式
特殊字符
所謂特殊字符,就是一些有特殊含義的字符山憨,如上面說的 runoo*b 中的 查乒,簡(jiǎn)單的說就是表示任何字符串的意思。如果要查找字符串中的 * 符號(hào)郁竟,則需要對(duì) * 進(jìn)行轉(zhuǎn)義玛迄,即在其前加一個(gè) : runo*ob 匹配 runoob。
許多元字符要求在試圖匹配它們時(shí)特別對(duì)待棚亩。若要匹配這些特殊字符蓖议,必須首先使字符"轉(zhuǎn)義",即讥蟆,將反斜杠字符\ 放在它們前面勒虾。下表列出了正則表達(dá)式中的特殊字符:
特別字符 | 描述 |
---|---|
$ | 匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性瘸彤,則 |
( ) | 標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置愕宋。子表達(dá)式可以獲取供以后使用。要匹配這些字符结榄,請(qǐng)使用 ( 和 )中贝。 |
* | 匹配前面的子表達(dá)式零次或多次。要匹配 * 字符潭陪,請(qǐng)使用 *雄妥。 |
+ | 匹配前面的子表達(dá)式一次或多次最蕾。要匹配 + 字符,請(qǐng)使用 +老厌。 |
. | 匹配除換行符 \n 之外的任何單字符瘟则。要匹配 . ,請(qǐng)使用 . 枝秤。 |
[ | 標(biāo)記一個(gè)中括號(hào)表達(dá)式的開始醋拧。要匹配 [,請(qǐng)使用 [淀弹。 |
? | 匹配前面的子表達(dá)式零次或一次丹壕,或指明一個(gè)非貪婪限定符。要匹配 ? 字符薇溃,請(qǐng)使用 ?菌赖。 |
\ | 將下一個(gè)字符標(biāo)記為或特殊字符、或原義字符沐序、或向后引用琉用、或八進(jìn)制轉(zhuǎn)義符。例如策幼, 'n' 匹配字符 'n'邑时。'\n' 匹配換行符。序列 '\' 匹配 ""特姐,而 '(' 則匹配 "("晶丘。 |
^ | 匹配輸入字符串的開始位置,除非在方括號(hào)表達(dá)式中使用唐含,此時(shí)它表示不接受該字符集合浅浮。要匹配 ^ 字符本身,請(qǐng)使用 ^觉壶。 |
{ | 標(biāo)記限定符表達(dá)式的開始脑题。要匹配 {,請(qǐng)使用 {铜靶。 |
“豎杠” | 指明兩項(xiàng)之間的一個(gè)選擇。要匹配 “豎杠”他炊,請(qǐng)使用 \“豎杠”争剿。 |
限定符
限定符用來指定正則表達(dá)式的一個(gè)給定組件必須要出現(xiàn)多少次才能滿足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6種痊末。
正則表達(dá)式的限定符有:
字符 | 描述 |
---|---|
* | 匹配前面的子表達(dá)式零次或多次蚕苇。例如,zo* 能匹配 "z" 以及 "zoo"凿叠。* 等價(jià)于{0,}涩笤。 |
+ | 匹配前面的子表達(dá)式一次或多次嚼吞。例如,'zo+' 能匹配 "zo" 以及 "zoo"蹬碧,但不能匹配 "z"舱禽。+ 等價(jià)于 {1,}。 |
? | 匹配前面的子表達(dá)式零次或一次恩沽。例如誊稚,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價(jià)于 {0,1}罗心。 |
{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 次削饵。例如岩瘦,"o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'窿撬。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格启昧。 |
定位符
定位符使您能夠?qū)⒄齽t表達(dá)式固定到行首或行尾。它們還使您能夠創(chuàng)建這樣的正則表達(dá)式劈伴,這些正則表達(dá)式出現(xiàn)在一個(gè)單詞內(nèi)密末、在一個(gè)單詞的開頭或者一個(gè)單詞的結(jié)尾。
定位符用來描述字符串或單詞的邊界跛璧,^ 和 $ 分別指字符串的開始與結(jié)束严里,span class="marked">\b 描述單詞的前或后邊界,span class="marked">\B 表示非單詞邊界追城。
正則表達(dá)式的限定符有:
字符 | 描述 |
---|---|
^ | 匹配輸入字符串開始的位置刹碾。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 還會(huì)與 \n 或 \r 之后的位置匹配座柱。 |
$ | 匹配輸入字符串結(jié)尾的位置迷帜。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性物舒,$ 還會(huì)與 \n 或 \r 之前的位置匹配。 |
\b | 匹配一個(gè)字邊界戏锹,即字與空格間的位置冠胯。 |
\B | 非字邊界匹配。 |
\d | 表示數(shù)字景用。 |
\D | 表示非數(shù)字涵叮。 |
\s | 表示空格。 |
\S | 表示非空格伞插。 |
\w | 表示所有字母割粮、數(shù)字和下劃線。 |
\W | 表示非所有字母媚污、數(shù)字和下劃線舀瓢。 |
注意:不能將限定符與定位點(diǎn)一起使用。由于在緊靠換行或者字邊界的前面或后面不能有一個(gè)以上位置耗美,因此不允許諸如 ^* 之類的表達(dá)式京髓。
若要匹配一行文本開始處的文本,請(qǐng)?jiān)谡齽t表達(dá)式的開始使用 ^ 字符商架。不要將 ^ 的這種用法與中括號(hào)表達(dá)式內(nèi)的用法混淆堰怨。
若要匹配一行文本的結(jié)束處的文本,請(qǐng)?jiān)谡齽t表達(dá)式的結(jié)束處使用 $ 字符蛇摸。
若要在搜索章節(jié)標(biāo)題時(shí)使用定位點(diǎn)备图,下面的正則表達(dá)式匹配一個(gè)章節(jié)標(biāo)題,該標(biāo)題只包含兩個(gè)尾隨數(shù)字赶袄,并且出現(xiàn)在行首揽涮。
注:[]里包含的是內(nèi)容,且只能是一個(gè)字符/空格饿肺;{}里包含的指定字符的個(gè)數(shù)蒋困。
回顧正則表達(dá)式
術(shù)語:字符組、排除型字符組敬辣、多選結(jié)構(gòu)雪标、反向引用、或與
. 匹配除換行符以外的任意字符
\w 匹配字母或數(shù)字或下劃線或漢字 等價(jià)于 ‘[A-Za-z0-9_]’(注:
\w能不能匹配漢字要視你的操作系統(tǒng)和你的應(yīng)用環(huán)境而定)
\W '\w'取反
\s 匹配任意的空白符
\S '\s'取反
\d 匹配數(shù)字
\D '\d'取反
\b 匹配單詞的開始或結(jié)束
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束
? 表示0個(gè)或1個(gè)
+ 表示重復(fù)一次或者多次
* 表示重復(fù)零次或者多次
{n,m} 表示n 到 m 次
- 前瞻:
exp1(?=exp2) 查找exp2前面的exp1
如:Jeffs is a person. 匹配==>`\bJeff(?=s\b)`
- 后顧:
(?<=exp2)exp1 查找exp2后面的exp1
- 負(fù)前瞻:
exp1(?!exp2) 查找后面不是exp2的exp1
- 負(fù)后顧:
(?<!=exp2)exp1 查找前面不是exp2的exp1
1溉跃、“字符組”示例
2汰聋、“或”示例
3、“非”示例
補(bǔ)充
謂詞語法總覽
拓展
還可以查看正則表達(dá)式(入門)。