正则表达式及测试工具
1. 正則表達式
正則表達式:一種匹配文本中的字符序列的字符模式。在很多文本編輯器或其他工具里,正則表達式通常被用來檢索或替換那些符合某種模式的文本內容。許多程序設計語言都支持利用正則表達式進行字符串操作。
一個正則表達式就是由普通字符(例如字符 ‘a’ 到 ‘z’)以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。
1.1 元字符
| 字符 | 描述 | 實例 |
| \d | 匹配任意的數字 | \d\d可以匹配12,但不匹配a1或1a等 |
| \D | 匹配任意的非數字字符 | \D\D匹配a@,不匹配12 |
| \w | 匹配單詞字符(包括字母、數字、下劃線和漢字) | ? |
| \W | 匹配任意的非單詞字符(包括字母、數字、下劃線和漢字) | \W匹配@等,不匹配a |
| \s | 匹配任何空白字符,包括空格、制表符、換行符等 | ? |
| \S | 匹配任意非空白字符 | ? |
| . | 匹配除換行符之外的任意字符 | ? |
| ^ | 匹配行的開始位置 | "^The":表示所有以"The"開始的字符串("There","The cat"等) |
| $ | 匹配行的結束位置 | "of despair$":表示以"of despair"結尾的字符串 |
| \b | 匹配單詞的開始或結束位置 | "\bcat"將匹配 "cat cat cat"首尾的"cat",中間的"cat"不會被匹配上 |
| \B | \b的補集 | "\bcat"將匹配 "cat cat cat"中間的"cat" |
2. 字符類
??在正則表達式中,元字符通常一次只能匹配一個位置或字符集合中的一個字符,但是如果要匹配的字符集合沒有與之相對應的元字符時,則需要自定義匹配的字符集合。此時可以使用字符類解決這個問題。字符類是一個字符集合,如果該字符集合中的任何一個字符被匹配,則它就會找到該匹配項。
? 字符類是正則表達式中的“迷你”語言,可以在方括號" []"中定義。例如: [012345]匹配數字0,1,2,3,4,5中的任何一個。[Jj]ack匹配字符串“Jack”或者“jack”。
? 然而,正則表達式[0123456789]的書寫非常不方便。因此,正則表達式引入連接符“-”定義字符的范圍。例如:正則表達式[0-9]等價于正則表達式[0123456789]。
3. 限定符
正則表達式的元字符一次只能匹配一個位置或一個字符,如果要匹配零個、一個或多個字符時,則需要使用限定符。限定符用于指定允許特定字符或字符集自身重復出現的次數。常用限定符的說明如表2.11所示。
| 字符 | 描述 | 實例 |
| {n} | 重復n次 | 'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 。 |
| {n,} | 至少重復n次 | 'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。 |
| {n,m} | 重復至少n次,最多m次 | "o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價于 'o?'。 |
| + | 重復至少1次,等同{1,} | 'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價于 {1,}。 |
| * | 重復至少0次,等同{0,} | zo* 能匹配 "z" 以及 "zoo"。 * 等價于{0,}。 |
| ? | 當該字符緊跟在任何一個其他限定符 (*, +, ?, {n}, {n,}, {n,m}) 后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。 | 對于字符串"oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o'。 |
4. 轉義字符
正則表達式定義了一些特殊的元字符,如^、$、.等。由于這些字符在正則表達式中被解釋成其他的特定的意義,如果需要匹配這些字符,則需要使用轉義字符來解決這一問題。轉義字符為“\”(反斜杠),它可以取消這些字符(如^、$、.等)在表達式中具有的特殊意義,轉義字符說明及實例如表2.12。
| 字符 | 描述 | 實例 |
| \ | 有些字符被用來表示特殊的含義,但是要匹配其本身時就需要用轉義字符。 | "\\"匹配"\" "\."匹配"." "\*"匹配"*" "\+"匹配"+" "\unnnn"匹配一個4位16進制數指定的Unicode |
5. 分組、“或”、以及反向引用
?? 前面講到怎么重復單個字符(直接在字符后面加上限定符就行了);但如果想要重復一個字符串就應該使用分組。
? 分組又稱為子表達式,即把一個正則表達式的全部或部分分成一個或多個組。其中,分組使用括號“()”表示。分組之后,可以將括號“()”之中的表達式看成一個整體來處理,然后再指定這個子表達式的重復次數。例如:“(\d{1,3}\.){3}\d{1,3}”是一個簡單的IP地址匹配表達式。 “(\d{1,3}\.){3}”匹配三位數字加上一個英文句號重復3次,“\d{1,3}”匹配1到3位的數字。
? ??“或”使用字符“|”來表示。如果某一個字符串匹配了正則表達式中的字符“|”的左邊或者右邊的規則,那么該字符串也匹配了該正則表達式。例如:“0\d{2}-\d{8}|0\d{3}-\d{7}|0\d{3}-\d{8}”匹配當前國內部分地區的3種固定電話號碼:一種是號碼的前3位為區號,后8位為本地號碼;另一種是號碼的前四位為區號,后7位為本地號碼;最后一種是號碼的前4位為區號,后8位為本地號碼。其中,區號和本地號碼都使用連接符號“-”進行連接。
? 反向引用:當一個正則表達式被分組之后,每一個組將自動被賦予一個組號,該組號可以代表該組的表達式。其中,組號的編制規則為:從左到右,以分組的左括號“(”為標志,第一個分組組號為1,第二個分組的組號為2,以此類推。反向引用提供了查找重復字符組的方便方法。它可被認為是再次匹配同一個字符串的快捷指令。反向引用可以使用數字命名的組號,語法為:\number,也可以使用指定命名的組號,語法為:\k<name>。例如:表達式“('|")(.*?)(\1)”在匹配“'Hello',"World"”時,首先匹配到的內容是:“'Hello'”。再次匹配下一個時,可以匹配到“"World"”。
2. RegEX Tester用來測試正則表達式
regEX Tester是一個簡單的用來測試正則表達式的工具,是開源的。
轉載于:https://www.cnblogs.com/wangshide/archive/2012/03/17/2404059.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的正则表达式及测试工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET AJAX Debuggi
- 下一篇: laravel中的自定义函数的加载和第三