国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

正則表達式知識分享

IT那活兒 / 4025人閱讀
正則表達式知識分享


一.正則的簡介


正則表達式主要是按照指定規則來匹配相應的字符串信息。正則表達式這個概念最初是由Unix中的工具軟件(grep等)普及開的,現在許多編程語言也都支持使用正則進行匹配。
如上圖所示,正則表達式中的. [] ^ $符號在Linux的不同系統工具或者不同開發語言中均適用;(),{},?,+,|等在不同的工具或語言中適用性有差別,主要是因為不同工具或語言遵循的正則表達式規范不同引起的。例如:在使用grep系統工具時發現,對于{}()等特殊符號有的需要轉義,有的不要轉義。


二.正則表達式規范


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


三.正則的特殊字符


1.  常用的元字符

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


2.  常用量詞

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

*   代表連續匹配前邊的內容任意次(換行符除外) 
+   和*類似,不同的是*可以匹配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中任意一個字符
[^a-z]      匹配非a-z的任意字符,達到了取反的效果


4.  其他的特殊字符

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

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

|   或條件 把不同的規則分開,按照順序進行匹配,其中一個匹配成功,即匹配結束

5.  貪婪匹配和惰性匹配

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

6.  斷言匹配

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

7. PCRE規范與Linux中工具使用規范的不同

  • vi/vim,grep,sed等工具遵循的是POSIX的基本語法規范,awk和egrep遵循的是POSIX擴展語法規范。因此,這是有的對{}進行轉義,有的不需要轉義的原因。

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

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

  • 使用()可以定義作用范圍,當在一個規則中使用多個括號時,可以使用1 2來調用前面括號的內容。


8.  POSIX字符組

我們在使用正則表達式時,也會遇到像[:digit:]表示數字字符、[:lower:]表示小寫字母字符的形式,這種形式就是POSIX字符組。POSIX字符在不同的字符集中對應的格式也不一樣,在ASCII中,對應關系如下:

9.  正則表達式舉例

1)擴展正則表達式表示IP的方式
拆分255的過程如下:
數值范圍:            對應的表達式
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的表達式為:  ( [1-9]?[0-9] | 1[0-9]{2} | 2[0-4][0-9] | 25[0-5] )
IP格式的整體表達式:
(([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)擴展正則匹配網址URL:
^(((ht|f)tps?)://|(www.)?)w.*(.(com|cn|io|html))$
拆分如下:
((ht|f)tps?)   匹配http,https,ftp三種格式
(www.)?       ?代表可以匹配0次或者1次www.
w.*           表示可以輸入任意內容(換行符除外)
(.(com|cn|io|html|htm|))$  可以匹配comcn、io、html等結尾的網址

因此以下形式的網址均可以被匹配:

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

四.正則表達式在nginx中的應用案例


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

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

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

這些匹配方式的優先級順序:
(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (location /)
借助location的匹配規則可以對一些特殊請求轉發到指定的應用,達到正向或反向分流的作用。

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

2. 正則匹配在中if模塊中的應用

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


3. 正則匹配基于域名的應用

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

#此處需要說明的一點是在nginx中$2是對前面括號內容的的引用,引用的是(.+),使用該正則可以用一個規則表達式區分不同域名對應的家目錄。

訪問 www.yewu.com的域名,其的站點家目錄結構為/data/wwwsite/yewu.com
訪問 www.xuqiu.com的域名,其的站點家目錄結構為/data/wwwsite/xuqiu.com

END


更多精彩干貨分享

點擊下方名片關注

IT那活兒

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129916.html

相關文章

  • PHP小知識

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

    hover_lew 評論0 收藏0
  • 正則達式

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

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

    摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...

    princekin 評論0 收藏0
  • 前端開發收集 - 收藏集 - 掘金

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

    ygyooo 評論0 收藏0
  • 讀《精通正則達式》-- 網上 js 正則基礎教程沒有涉及的一些知識

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

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

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

    caikeal 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<