簡介 Introduction
正則運算式(Regular Expression) 是計算機科學的一個概念,正則運算式是使用單個字串來描述和匹配一系列符合句法規則的字串,在很多文本編輯器里,正則運算式通常被用來檢索和替換那些符合某個模式的文本,
匹配規則
字面量字符和元字符
在正則運算式中,只表示其自身字符含義的叫做字面量字符,其實,大部分字符都表示字面含義,如:
/a/ #匹配 'a'
/b/ #匹配 'b'
/ab/ #匹配 'ab'
還有一些字符代表特殊含義,而不是其自身意義,叫做元字符,如:
-
|字符表示“或”運算,匹配|字符左邊或右邊的字串,|的數量可推廣,
/a|b/ #匹配 'a' 或者 'b'
/a|b|c/ #匹配 'a' 或 'b' 或 'c'
/ab|cd/ #匹配 'ab' 或 'cd' 而不匹配 'a' 或 'b' 或 'c' 或 'd'
-
.字符匹配除了回車、換行、行分隔符和段分割符的字符,
/a.b/ #可匹配a,b之間任意字符,如:'acb','a0b'等,但不匹配中間含有多個字符的情況
-
位置符:
-
^字符匹配字串開始的位置 -
$字符匹配字串結束的位置
-
/^123/ #可匹配'123'出現在開始位置的字串,如'12345'
/123$/ #可匹配'123'出現在結束位置的字串,如'0123'
轉義字符
如果想要匹配正則運算式中的元字符本身,則需要在它們前面加反斜杠\,如:
/a\+b/ #匹配 'a+b'
正則運算式中需要反斜杠轉義的有:|,.,^,$,{,[,(,),\,+,*
特殊字符
正則運算式對一些不能列印的字符提供了特殊的表示方法:
-
\cX表示Ctrl-[X],其中的X是A-Z之中任一個英文字母,用來匹配控制字符, -
[\b]匹配退格鍵(U+0008), -
\n匹配換行鍵, -
\r匹配回車鍵, -
\t匹配制表符 tab(U+0009), -
\v匹配垂直制表符(U+000B), -
\f匹配換頁符(U+000C), -
\0匹配null字符(U+0000)
字符類
字符類表示給定一系列字符,只要匹配其中任意一個即可,字符序列被放入方括號[]中,如:
/[abc]/ #可匹配'app,因為'app'含有字符'a',但不能匹配'def',因為'def'不含'abc'中任意一個
-
如果方括號內的第一個字符是
[^],則表示除了字符類之中的字符,其他字符都可以匹配,比如,[^xyz]表示除了x、y、z之外都可以匹配,
/[^abc]/ #可以匹配'cde',但不能匹配'cba'
-
如果方括號內沒有其他字符,只有
[^],就表示匹配一切字符,其中包括換行符,相比之下,點號作為元字符(.)是不包括換行符的 -
^只有在字符類的第一個位置才有特殊含義,否則就是字面含義, -
某些情況下,對于連續序列的字符,連字符(
-)用來提供簡寫形式,表示字符的連續范圍,比如,[abc]可以寫成[a-c],[0123456789]可以寫成[0-9],26個大寫字母可以寫成[A-Z],
修飾符
修飾符放在正則運算式的末尾,表示一些附加規則,如:
-
i修飾符表示忽略大小寫
/abc/i #可匹配 'abc' 或 'ABC'
-
m修飾符表示會破壞^和$的匹配規則
/name$/ #不能匹配'my name\n'因為結尾不是name,而是換行符
/name$/m #可以匹配'my name\n'
-
g修飾符表示全域匹配,默認情況下,正則運算式第一次匹配成功就停止了,而g修飾符可以匹配到末尾
/aaaaa/ #只匹配第一個'a'
/aaaaa/g #匹配所有的'a'
數量符
數量符用來表示某個模式的出現次數,
-
?問號表示某個模式出現0次或1次, -
*星號表示某個模式出現0次或多次, -
+加號表示某個模式出現1次或多次,
/n?ame/ #可匹配'name','ame'
/n*ame/ #可匹配'name','ame','nname'
/n+ame/ #可匹配'name','nname'
數量符默認為貪婪匹配,在數量符后加?可以將其變為非貪婪匹配:
-
+?:表示某個模式出現1次或多次,匹配時采用非貪婪模式, -
*?:表示某個模式出現0次或多次,匹配時采用非貪婪模式, -
??:表格某個模式出現0次或1次,匹配時采用非貪婪模式
貪婪匹配指匹配到下一個字符不滿足要求為止,而非貪婪匹配則只匹配到第一個滿足要求的字符,
重復
表示模式的精確匹配次數,使用大括號{}表示,{n}表示恰好重復n次,{n,}表示至少重復n次,{n,m}表示重復不少于n次,不多于m次,
/a{2}b/ #可匹配'aab'
/a{2,}b/ #可匹配'aab','aaab'
/a{2,4}b/ #匹配'aaab'
預定義
預定義模式指的是某些常見模式的簡寫方式,
-
\d匹配0-9之間的任一數字,相當于[0-9], -
\D匹配所有0-9以外的字符,相當于[^0-9], -
\w匹配任意的字母、數字和下劃線,相當于[A-Za-z0-9_], -
\W除所有字母、數字和下劃線以外的字符,相當于[^A-Za-z0-9_], -
\s匹配空格(包括換行符、制表符、空格符等),相等于[ \t\r\n\v\f], -
\S匹配非空格的字符,相當于[^ \t\r\n\v\f], -
\b匹配詞的邊界, -
\B匹配非詞邊界,即在詞的內部,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/509023.html
標籤:其他
上一篇:MFC繪圖——金剛石
下一篇:資料庫事務的四大特性
