成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

正則表達(dá)式知識(shí)分享

IT那活兒 / 4034人閱讀
正則表達(dá)式知識(shí)分享


一.正則的簡介


正則表達(dá)式主要是按照指定規(guī)則來匹配相應(yīng)的字符串信息。正則表達(dá)式這個(gè)概念最初是由Unix中的工具軟件(grep等)普及開的,現(xiàn)在許多編程語言也都支持使用正則進(jìn)行匹配。
如上圖所示,正則表達(dá)式中的. [] ^ $符號(hào)在Linux的不同系統(tǒng)工具或者不同開發(fā)語言中均適用;(),{},?,+,|等在不同的工具或語言中適用性有差別,主要是因?yàn)椴煌ぞ呋蛘Z言遵循的正則表達(dá)式規(guī)范不同引起的。例如:在使用grep系統(tǒng)工具時(shí)發(fā)現(xiàn),對于{}()等特殊符號(hào)有的需要轉(zhuǎn)義,有的不要轉(zhuǎn)義。


二.正則表達(dá)式規(guī)范


Unix/Linux下的工具大多采用POSIX規(guī)范,該規(guī)范包含基本語法(BRE)和擴(kuò)展語法兩種(ERE)兩種,其中擴(kuò)展語法不能理解為對基本語法的擴(kuò)充,其本身也是一套完整規(guī)范。
另外一種從Perl衍生出來,叫做PCRE規(guī)范,當(dāng)然還有其他的規(guī)范,這里就不多做介紹。
以grep為例,來演示如何在Linux系統(tǒng)中去切換到各種規(guī)范下使用正則表達(dá)式。
基本語法:  grep “^#{1,}”/etc/fstab
基本語法中,{}()等特殊符號(hào)需要轉(zhuǎn)譯的,如果使用擴(kuò)展語法或PCRE規(guī)范不需要。
擴(kuò)展語法:grep -E “^#{1,}”/etc/fstab   或者  egrep “^#{1,}” /etc/fstab
通過添加-E參數(shù)或者使用egrep命令來切換到擴(kuò)展語法規(guī)范。
PCRE規(guī)范:grep -P “^#{1,}”/etc/fstab
注意Linux系統(tǒng)需要加載PCRE依賴包,通過添加-P參數(shù)切換到PCRE規(guī)范。


三.正則的特殊字符


1.  常用的元字符

.  匹配除換行符以外的任意一個(gè)字符
^  匹配字符串的開始位置
$  匹配字符串的結(jié)束位置
w  匹配字母和數(shù)字以及下劃線其中的一個(gè)字符,相當(dāng)于[_a-zA-Z0-9]
W  匹配不是字母、數(shù)字、下劃線的字符,即w的補(bǔ)集
d  匹配任意一個(gè)數(shù)字,相當(dāng)于[0-9]
D  匹配任意非數(shù)字的字符,d的補(bǔ)集
b  匹配單詞的開頭或結(jié)尾位置,用于精確匹配
eveningb  Good evening leveningll 僅匹配是evening的完整單詞
B  匹配不是單詞開頭或結(jié)束的位置
BveniB    Good evening veni 僅匹配單詞內(nèi)部含veni的字符串
s  匹配空格符號(hào)
S  匹配非空格符號(hào)


2.  常用量詞

常用量詞主要是對前面的字符的匹配次數(shù)

*   代表連續(xù)匹配前邊的內(nèi)容任意次(換行符除外) 
+   和*類似,不同的是*可以匹配0次,而+則是匹配至少1次
?   匹配0次或1次
{n}  匹配前面的字符n次
{n,}  匹配前面的字符至少n次
{n,m}  匹配前面的字符n次到m次


3. 字符集合

[xyz]       匹配x或y或z
[a-zA-Z0-9] 匹配a-z或A-Z或0-9中任意一個(gè)字符
[^a-z]      匹配非a-z的任意字符,達(dá)到了取反的效果


4.  其他的特殊字符

()  以組的形式將多個(gè)字符作為一個(gè)整體。

如(abc){2,} 表示至少是abcabc。在一個(gè)表達(dá)式中使用多個(gè)()定義組,則使用1,2的形式來調(diào)用的定義的組。

|   或條件 把不同的規(guī)則分開,按照順序進(jìn)行匹配,其中一個(gè)匹配成功,即匹配結(jié)束

5.  貪婪匹配和惰性匹配

.*  表示貪婪匹配   a.*b    最先出現(xiàn)a到最后出現(xiàn)的b   cca000bccccaccbcab
.*? 表示惰性匹配   a.*?b   最先出現(xiàn)a到最先出現(xiàn)的b   cca000bccccaccbcab

6.  斷言匹配

(?=exp)  匹配exp前面位置的字符
(?<=exp) 匹配exp后面的位置的字符
此處僅列舉了較簡單的兩個(gè)示例,還有一些其他的復(fù)雜,有興趣的可以網(wǎng)上查看下。

7. PCRE規(guī)范與Linux中工具使用規(guī)范的不同

  • vi/vim,grep,sed等工具遵循的是POSIX的基本語法規(guī)范,awk和egrep遵循的是POSIX擴(kuò)展語法規(guī)范。因此,這是有的對{}進(jìn)行轉(zhuǎn)義,有的不需要轉(zhuǎn)義的原因。

  • PCRE中常用來表示“單詞的起始或結(jié)束位置”,但Linux/Unix的工具中,通常用<來匹配“單詞的起始位置”,用>來匹配“單詞的結(jié)束位置”,sed中的y可以同時(shí)匹配這兩個(gè)位置。

  • 不同規(guī)范中分枝匹配也有一定差別,有的用...|...,而有的用(...|...)。

  • 使用()可以定義作用范圍,當(dāng)在一個(gè)規(guī)則中使用多個(gè)括號(hào)時(shí),可以使用1 2來調(diào)用前面括號(hào)的內(nèi)容。


8.  POSIX字符組

我們在使用正則表達(dá)式時(shí),也會(huì)遇到像[:digit:]表示數(shù)字字符、[:lower:]表示小寫字母字符的形式,這種形式就是POSIX字符組。POSIX字符在不同的字符集中對應(yīng)的格式也不一樣,在ASCII中,對應(yīng)關(guān)系如下:

9.  正則表達(dá)式舉例

1)擴(kuò)展正則表達(dá)式表示IP的方式
拆分255的過程如下:
數(shù)值范圍:            對應(yīng)的表達(dá)式
0-9                              [0-9]
10-99                         [1-9][0-9]
100-199                     1[0-9]{2}
200-249                     2[0-4][0-9]
250-255                     25[0-5]

0-255的表達(dá)式為:  ( [1-9]?[0-9] | 1[0-9]{2} | 2[0-4][0-9] | 25[0-5] )
IP格式的整體表達(dá)式:
(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

2)擴(kuò)展正則匹配網(wǎng)址URL:
^(((ht|f)tps?)://|(www.)?)w.*(.(com|cn|io|html))$
拆分如下:
((ht|f)tps?)   匹配http,https,ftp三種格式
(www.)?       ?代表可以匹配0次或者1次www.
w.*           表示可以輸入任意內(nèi)容(換行符除外)
(.(com|cn|io|html|htm|))$  可以匹配comcn、io、html等結(jié)尾的網(wǎng)址

因此以下形式的網(wǎng)址均可以被匹配:

http://aa.123.com
ftp://aa.sss.sss.com
http://bb.com
www.aa.cn
aa.com

四.正則表達(dá)式在nginx中的應(yīng)用案例


在編譯安裝nginx前,需要安裝PCRE依賴包,nginx中的正則是遵循PCRE規(guī)范。

1. 正則匹配在location模塊中的使用

location模塊中主要有以下幾種匹配的形式
=      #進(jìn)行普通字符精確匹配
^~    #不使用正則匹配,對uri路徑進(jìn)行前綴匹
         配,并且在正則之前。
~      #表示執(zhí)行一個(gè)正則匹配,區(qū)分大小寫
~*    #表示執(zhí)行一個(gè)正則匹配,不區(qū)分大小寫
/       # 對前綴進(jìn)行匹配。

這些匹配方式的優(yōu)先級(jí)順序:
(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (location /)
借助location的匹配規(guī)則可以對一些特殊請求轉(zhuǎn)發(fā)到指定的應(yīng)用,達(dá)到正向或反向分流的作用。

location ~* .(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg結(jié)尾的請求

2. 正則匹配在中if模塊中的應(yīng)用

if模塊借助nignx的內(nèi)部變量來進(jìn)行“~”(大小寫敏感)和“~*”(大小寫不敏感)正則匹配
舉例:nginx做反爬蟲的策略
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
    return 403;
   }
----------------------------------------------、


3. 正則匹配基于域名的應(yīng)用

server{
    listen 80;
    server_name ~ ^(www.)?(.+)$;
    index index.php index.html;
    root /data/wwwsite/$2;
  }

#此處需要說明的一點(diǎn)是在nginx中$2是對前面括號(hào)內(nèi)容的的引用,引用的是(.+),使用該正則可以用一個(gè)規(guī)則表達(dá)式區(qū)分不同域名對應(yīng)的家目錄。

訪問 www.yewu.com的域名,其的站點(diǎn)家目錄結(jié)構(gòu)為/data/wwwsite/yewu.com
訪問 www.xuqiu.com的域名,其的站點(diǎn)家目錄結(jié)構(gòu)為/data/wwwsite/xuqiu.com

END


更多精彩干貨分享

點(diǎn)擊下方名片關(guān)注

IT那活兒

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129916.html

相關(guān)文章

  • PHP小知識(shí)點(diǎn)

    摘要:那些瑣碎的知識(shí)點(diǎn)作者記錄的的很奇特很難記的知識(shí)點(diǎn)。易錯(cuò)知識(shí)點(diǎn)整理注意和的區(qū)別中和都是輸出的作用,但是兩者之間還是有細(xì)微的差別。今天手頭不忙,總結(jié)一下,分享過程中掌握的知識(shí)點(diǎn)。 深入理解 PHP 之:Nginx 與 FPM 的工作機(jī)制 這篇文章從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx 與 PHP 是如何協(xié)同工作的。 PHP 那些瑣碎的知識(shí)...

    hover_lew 評論0 收藏0
  • 正則達(dá)式

    摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號(hào)手機(jī)號(hào)中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語法在中使用正則表達(dá)式在中使 JS高級(jí)技巧 本篇是看的《JS高級(jí)程序設(shè)計(jì)》第23章《高級(jí)技巧》做的讀書分享。本篇按照書里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時(shí)指出書里的一些問題。將會(huì)討論安全的類型檢測、惰性載入函數(shù)、凍結(jié)對象、定時(shí)器等話題。1. 安全的類型檢測...

    yibinnn 評論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評論0 收藏0
  • 前端開發(fā)收集 - 收藏集 - 掘金

    摘要:責(zé)編現(xiàn)代化的方式開發(fā)一個(gè)圖片上傳工具前端掘金對于圖片上傳,大家一定不陌生。之深入事件機(jī)制前端掘金事件綁定的方式原生的事件綁定方式有幾種想必有很多朋友說種目前,在本人目前的研究中,只有兩種半兩種半還有半種的且聽我道來。 Ajax 與數(shù)據(jù)傳輸 - 前端 - 掘金背景 在沒有ajax之前,前端與后臺(tái)傳數(shù)據(jù)都是靠表單傳輸,使用表單的方法傳輸數(shù)據(jù)有一個(gè)比較大的問題就是每次提交數(shù)據(jù)都會(huì)刷新頁面,用...

    ygyooo 評論0 收藏0
  • 讀《精通正則達(dá)式》-- 網(wǎng)上 js 正則基礎(chǔ)教程沒有涉及的一些知識(shí)

    摘要:正則起源最近看完了精通正則表達(dá)式,收獲頗豐,略過了一些晦澀難懂的理論部分,主要看了實(shí)戰(zhàn)和教程部分。然后下面說一下以上兩個(gè)基礎(chǔ)教程里沒說到的知識(shí)點(diǎn)。最后以上是我在精通正則表達(dá)式一書中得到的一些收獲,希望能分享給大家,如有錯(cuò)誤歡迎指正。 正則起源 最近看完了 《精通正則表達(dá)式》,收獲頗豐,略過了一些晦澀難懂的理論部分,主要看了實(shí)戰(zhàn)和教程部分。 下面引用一下百度百科里的內(nèi)容。 正則表達(dá)式的鼻...

    GT 評論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計(jì)模式力薦深度好文深入理解大設(shè)計(jì)模式收集各種疑難雜癥的問題集錦關(guān)于,工作和學(xué)習(xí)過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱為惰性加載,即在長網(wǎng)頁中延遲加載圖像。用戶滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...

    caikeal 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<