正则表达式(overall)
令自己想愛但深愛不上的正則表達式~
閱讀網站:http://c.biancheng.net/cpp/html/1402.html
為什么使用正則表達式?
①防止SQL注入:尤其對于網站,安全是至關重要的,寫好正則表達式,能夠驗證輸入信息,保證輸入數據的合法性,不至于不法人士侵入數據庫破壞網站;
②采集:從互聯網上按照某種規則搜索想要的數據,對于分析復雜的HTML標簽,正則表達式是一件利器;
③驗證數據:無論對于軟件還是網站,用戶輸入的數據都需要驗證后再提交,以得到安全和想要的數據。
1.\b:
正則表達式規定的一個特殊代碼(某些人叫它元字符,metacharacter),代表著單詞的開頭或結尾,也就是單詞的分界處。雖然通常英文的單詞是由空格,標點符號或者換行來分隔的,但是\b并不匹配這些單詞分隔字符中的任何一個,它只匹配一個位置。
精確地查找hi這個單詞的話,我們應該使用\bhi\b。
2..
元字符,匹配除了換行符以外的任意字符。
3.*
元字符,不過它代表的不是字符,也不是位置,而是數量——它指定*前邊的內容可以連續重復使用任意次以使整個表達式得到匹配(重復零次或更多次)。
所以當.*連在一起就意味著任意數量的不包含換行的字符。
4.\d
元字符,匹配一位數字(0,或1,或2,或……)。
5.-
不是元字符,只匹配它本身——連字符(或者減號,或者中橫線,或者隨你怎么稱呼它)。
6.\s
匹配任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格等。
7.\w
匹配字母或數字或下劃線或漢字等。
8.^
匹配字符串的開始
9.$
匹配字符串的結束
10.+
重復一次或更多次
11.?
重復零次或一次
12.{n}
重復n次
13.{n,}
重復n次或更多次
14.{n,m}
重復n到m次
分枝條件
正則表達式里的分枝條件指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。
反義(大寫):
零寬斷言:
用于查找在某些內容(但并不包括這些內容)之前或之后的東西,也就是說它們像\b,^,$那樣用于指定一個位置,這個位置應該滿足一定的條件(即斷言);
(?=exp)也叫零寬度正預測先行斷言,它斷言自身出現的位置的后面能匹配表達式exp。比如\b\w+(?=ing\b),匹配以ing結尾的單詞的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.時,它會匹配sing和danc。
(?<=exp)也叫零寬度正回顧后發斷言,它斷言自身出現的位置的前面能匹配表達式exp。比如(?<=\bre)\w+\b會匹配以re開頭的單詞的后半部分(除了re以外的部分),例如在查找reading a book時,它匹配ading。
假如你想要給一個很長的數字中每三位間加一個逗號(當然是從右邊加起了),你可以這樣查找需要在前面和里面添加逗號的部分:((?<=\d)\d{3})*\b,用它對1234567890進行查找時結果是234567890。
(?<=\s)\d+(?=\s)匹配以空白符間隔的數字(再次強調,不包括這些空白符)
懶惰限定符:
正則表達式中包含能接受重復的限定符時,通常的行為是(在使整個表達式能得到匹配的前提下)匹配盡可能多的字符。考慮這個表達式:
a.*b,它將會匹配最長的以a開始,以b結束的字符串。如果用它來搜索aabab的話,它會匹配整個字符串aabab。這被稱為貪婪匹配;
有時,我們更需要懶惰匹配,也就是匹配盡可能少的字符。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它后面加上一個問號?。
這樣.*?就意味著匹配任意數量的重復,但是在能使整個匹配成功的前提下使用最少的重復。
更多的……
更多例子:
1.要求填寫的QQ號必須為5位到12位數字時,可以使用:^\d{5,12}$;
2. 匹配剛好6個字母/數字的單詞:\b\w{6}\b;
3.\ba\w*\b匹配以字母a開頭的單詞——先是某個單詞開始處(\b),然后是字母a,然后是任意數量的字母或數字(\w*),最后是單詞結束處(\b);
4.0\d{2}-\d{8}|0\d{3}-\d{7}匹配兩種以連字號分隔的電話號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445);
5.((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)IP地址;
6.(?<![a-z])\d{7}匹配前面不是小寫字母的七位數字;
7.\d{3}(?!\d)匹配三位數字,而且這三位數字的后面不能是數字;
8.\b((?!abc)\w)+\b匹配不包含連續字符串abc的單詞;
9.(?<=<(\w+)>).*(?=<\/\1>)匹配不包含屬性的簡單HTML標簽內里的內容——
(<?(\w+)>)指定了這樣的前綴:被尖括號括起來的單詞(比如可能是<b>),
然后是.*(任意的字符串),最后是一個后綴(?=<\/\1>)。
注意后綴里的\/,它用到了前面提過的字符轉義;\1則是一個反向引用,引用的正是捕獲的第一組,前面的(\w+)匹配的內容,這樣如果前綴實際上是<b>的話,后綴就是</b>了。整個表達式匹配的是<b>和</b>之間的內容(再次提醒,不包括前綴和后綴本身);
10.總覽表:
寫在最后的:
果然,正則表達式會是自己一直的“痛”,不過終再努力一點,加油~
轉載于:https://www.cnblogs.com/zhengyeye/p/7422978.html
總結
以上是生活随笔為你收集整理的正则表达式(overall)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 0. VS2015快捷键
- 下一篇: P1133 教主的花园