WebRTC 基礎 TURN的工作過程和原理
阿新 • • 發佈:2020-10-23
前言
正則表示式是一個字串處理的標準依據。是使用單個字串搜尋、匹配一系列符合某個語法規則的字串。通過特殊字元+普通字元來進行模式描述,從而達到文字匹配目的。
一、正則表示式分類
- 字元類
- 數量限定符
- 位置限定符
1.1 字元類
元字元 | 功能 | 舉例 |
---|---|---|
. | 匹配除了換行符之外的任意一個字元 | #egrep a.b 檔名;表示匹配檔案中a跟b之間有一個任意字元的行; |
- | 在括號中使用,表示匹配的字元的範圍 | [0-9]表示的就是從數字0到數字9這個範圍的數字; |
[ ] | 匹配括號中的任意一個字元 | #egrep [0-9] 檔名;表示匹配檔案中含有0-9任意一個數字的行; |
[[:xxx:]] | grep工具預定義的一些命名字元 | [[:digit:]]表示匹配一個數字[0-9],[[:alpha:]表示匹配一個英文字母[a-Z] |
1.2 數量限定符
字元 | 功能 | 舉例 |
---|---|---|
? | 緊跟在它前面的單元應匹配零次或者一次 ,是萬用字元的一種,等價於(0,1) | |
+ | 緊跟在它前面的單元應匹配一次或者多次(至少一次),等價於(1,) | |
* | 緊跟在它前面的單元匹配零次或者多次,是萬用字元的一種 | “a”:表示匹配所有內容,包括空行;“aa”:表示匹配至少含有一個a的行;“aaa”:表示匹配至少含有兩個a的行; |
{n} | 緊跟在它前面的單元應匹配n次 | [0-9]{4}:表示匹配4位數字; |
{n,} | 緊跟在它前面的單元應匹配至少n次 | [0-9]{3,}:表示匹配至少匹配3位數字; |
{,m} | 緊跟在它前面的單元應匹配最多m次 | [0-9]{,2}:表示匹配數字最多2位 |
{n,m} | 緊跟在它前面的單元應匹配至少n次,最多m次 | [0-9]{1,3}:表示匹配數字至少1位,最多3位; |
1.3 位置限定符
元字元 | 功能 | 舉例 |
---|---|---|
^ | 匹配行首的位置;a.位於[ ]括號內,則匹配除括號中字元之外的任意字元,也就是對[ ]括號內的字元取反;b.位於[ ]括號外面,則表示以[ ]中的任意一個字元開頭 | ^a:表示匹配檔案中以a開頭的行;[ ^0-9]:表示匹配任意一位非數字字元; |
$ | 匹配行尾的位置 | “a$”:表示匹配以a結尾的行; |
1.4 其他元字元
元字元 | 功能 | 舉例 |
---|---|---|
\ | 轉義符,可以將普通字元轉為特殊字元,將特殊字元轉為普通字元,大多時候是用在將特殊字元的含義取消 | ".$“如果前面沒有加轉義符,則表示匹配以任意一個字元結尾的行,加上轉義字元之後表示匹配以”."結尾的行,也就是把“.“的特殊含義取消了,變成普通的”.”符號; |
() | 小括號可以將正則表示式的一部分括起來組成一個單元(也就是一個組),可以對整個單元使用數量限定符 | ([a-z]-[0-9]){1,3}:表示匹配”字母-數字“這樣的格式的組合三次 |
| |
連線兩個子表示式,表示或的關係 | a|b 表示a或者b; |
1.5 表示集合的字元類描述
字元 | 描述 |
---|---|
[:alnum:] | 表示所有字母數字的集合,[a-z A-Z 0-9] |
[:alpha:] | 表示所有字母的集合,[a-z A-Z] |
[:digit:] | 表示所有數字,[0-9] |
[:lower:] | 表示所有的小寫字母的集合,小寫[a-z] |
[:upper:] | 表示所有大寫字母的集合,大寫[A-Z] |
[:space:] | 表示空格 |
[:blank:] | 表示所有空格或者製表鍵(tab鍵)的集合 |
[:punct:] | 表示所有的標點字元 |
[:cntrl:] | 表示所有的控制字元 |
[:print:] | 表示所有的非控制字元 |
[:graph:] | 表示所有可視,可列印的字元(不包含空格) |
[:xdigit:] | 表示所有十六進位制的數字的集合,[0-9 a-f A-F] |
二、正則表示式優先順序
正則表示式與算術表示式類似,遵循優先順序順序,相同優先順序的從左到右進行運算,不同優先順序的運算先高後低。下表從上到下說明了各種正則表示式運算子的優先順序順序,同行表示同級:
運算子 | 描述 |
---|---|
\ | 轉義符 |
(),(?: ),(?=),[] |
圓括號和方括號 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \任何元字元、任何字元 | 定位點和序列(即:位置和順序) |
| |
“或"操作,字元具有高於替換運算子的優先順序,所以”s|get “匹配"s"或"get”。若要匹配"set"或"get",需要使用括號建立子表示式,例:"(s|g)et " |