摘要:記錄下自己在學習正則的過程中涉略到的點肃弟,以便在以后的應用中隨時查看鞏固
1.首先明確正則是個什么東西
? ? 簡單說正則就是一種模式悠砚,是一種字符串匹配的模式。也就是說正則就是用來匹配字符串的,例如:用來檢查一個字符串中是否還有子串赏陵、將匹配到的子串替換仲智,或者從莫一個串中取出符合條件的某個子串买乃。example: ? ?
?hello+world可以匹配helloworld、hellooworld钓辆、heloooooworld剪验,其中的+表示匹配前面的字符至少出現(xiàn)一次。
hello*world可以匹配hellworld前联、helloworld功戚、hellooworld、heloooooworld,這是因為*表示的是*前面的字符可以出現(xiàn)0次似嗤,1次或者多次疫铜。
2.正則表達式的構成
? ? 正則表達式是由普通字符(例如字符a-z)和特殊字符(稱為元字符)組成的文字模式,這種模式描述的是一種在搜索文本時要匹配的一個或者多個字符串双谆。所謂的普通字符是指除元字符外的所有不可打印和打印字符壳咕。包括所有的大小寫字母,所有的數(shù)字顽馋,所有的標點符號和一些其他的符號等谓厘。
? ? 常見的非打印字符有:
? ??????\n ?匹配一個換行符。等價于 \x0a 和 \cJ寸谜。
? ??????\r 匹配一個回車符竟稳。等價于 \x0d 和 \cM。
? ? ? ? \s 匹配任何空白字符熊痴,包括空格他爸、制表符、換頁符等等果善。等價于 [ \f\n\r\t\v]
? ? ? ? \S 匹配任何非空白字符诊笤。等價于 [^ \f\n\r\t\v]
? ? ? ? \t 匹配一個制表符。等價于 \x09 和 \cI巾陕。
? ?正則中的特殊字符有:
$ ? ? ? ?匹配字符串的結尾位置
() ? ? ? ? 標記一個子表達式的開始和結束位置讨跟,則表達式可以供以后獲取
* ? ? ? ? ?匹配*前面的字符或者表達式0次,1次或者多少次
+ ? ? ? ? ?匹配*前面的字符或者表達式1次或者多次
. ? ? ? ? ? ?匹配除換行\(zhòng)n之外的單字符
鄙煤? ? ? ? ? 匹配前面的字符或者自表達式0次或1次晾匠。或者指明一個非貪婪限定符
\ ? ? ? ? ? ? 轉義符
^ ? ? ? ? ? ?匹配輸入字符串的開始位置梯刚,除非在方括號中使用凉馆,表示非
| ? ? ? ? ? ?匹配兩者之間的選擇一個
{ ? ? ? ? ? ?限定表達式的開始 ?所謂的限定就是說某個字符限定出現(xiàn)幾次
常見的限定符
? ? 常見的限定符有或*或+或?或{n}或{n,}或{n,m}
? ? ps: *和+都是貪婪匹配(所謂的貪婪匹配是指盡可能多的匹配文字),只需要在他們后面添加澜共?(也就是說+向叉?和*?) 就可以將其轉換為非貪婪(盡可能少的匹配文字)如下的匹配:
貪婪模式下:/<.*>/ ? ? ? ? 表示已<開始咳胃,中間有任意個非換行字符植康,然后以>結束
在貪婪模式下匹配<h1>hello world</h1> 會從第一個<開始一直匹配到最后一個>,也就是說會盡可能多的匹配
在非貪婪模式下<.*?>只會匹配到<h1> 匹配到第一個>就會停止搜索
正則表達式的應用就是將上面提到的按照各種格式組合使用寫出符合需求的正則模式
常見的正則表達式:
1.校驗數(shù)字的正則表達式
數(shù)字: ? ? /^\d*$/ ? 或者 /^[0-9]*$/
n位的數(shù)字: ? ?/^\d{n}$/ ?或者/^[0-9]{n}$/
至少n為的數(shù)字:/^\d{n,}$/ 或者/^[0-9]{n,}$/
m-n位的數(shù)字: /^\d{m,n}$/ 或者 /^[0-9]{m,n}$/
零和非零開頭的數(shù)字: /^(0|[1-9][0-9]*)$/
非零開頭的最多帶兩位小數(shù)的數(shù)字: /^([1-9][0-9]*)+(\.[1-9]{0,2})?$/?
帶1-2位小數(shù)的正數(shù)或者負數(shù): /^(-)?[1-9][0-9]?\.[0-9]{1,2}$/ 或者/^(-)?\d+(\.\d{1,2})$/
正數(shù)旷太、負數(shù)展懈、小數(shù): ? ? /^(-)?\d+(\.\d+)?$/
有兩位小數(shù)的正實數(shù): /^\d+\.\d{2}$/
有1到3位小數(shù)的正實數(shù): ? ? ?/^\d+\.\d{1,3}/
非零的正整數(shù): ? ? ? ?/^[1-9]*$/ ? 或者 /^\+?[1-9][0-9]*$/
非零的負整數(shù): ? ? ? ?/^\-[1-9][0-9]*$/
非負整數(shù): ? ? ? ?/^\d+$/ ? 或者/^[1-9][0-9]*|0$/
非正整數(shù): ? ?/^-\d+$/ ?或者 ? ?/^-[1-9]\d*|0$/
非負浮點數(shù): ? ?包含例如10. 或者 10.00233 或者 0.2223 或者 .33333 或者0,或者10(整數(shù)可以認為是特殊的浮點數(shù))像這樣格式的都可以認為是浮點數(shù)供璧,那么正則就應該這樣寫
/^\d+(\.\d+)?$/ ? 或者 /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$/
非正浮點數(shù) ? ?/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/
浮點數(shù) ? ?/^(-?\d+)(\.\d+)$/
校驗字符的正則
? ? 漢字 ? ? /^[\u4e00-\u9fa5]{0,}$/
? ? 英文和數(shù)字 ? ?/^[a-zA-Z0-9]$/
? ? 長度為3到20的所有字符 ? ?/^.{3,20}$/
? ? 由26個英文字母存崖,數(shù)字,下劃線組成的字符 ? ?/^\w+$/