參考資料:cocoachina的zys475481075的文章
幾個單詞
Regular ['regjʊlə]adj. 定期的;有規律的
Expression[ɪk'spreʃ(ə)n; ek-] n. 表現,表示
Regularexpression正則表達式
什麼是正則表達式?
用一個描述字符串去驗證另一個字符串是否符合描述字符串的特徵。(不嚴謹,可以這麼理解)
思考:比如表達式“12+”,描述的意思是一個1和任意個2組成的字符串,那麼'12'、’122‘、'122'….都符合描述特徵
正則表達式用來幹嘛?
常用到的幾種方式:
1、驗證字符串是否符合指定要求:比如驗證郵箱格式、密碼個數等等
2、查找符合指定要求的字符串,這個比從父串中查找子串方便太多
3、替換,更強大
思考:正則的用途無非2種,驗證、字符串的處理(查找、替換、刪除之類)
正則表達式的基礎知識
一、單種匹配,匹配一次
1、普通字符:字母、數字、漢字、下劃線、沒有特殊定義的標點
舉例::表達式"c",匹配字符串"adasc",匹配結果:"c",匹配位置:始於4,結束於5
2、轉義字符:有特殊意義的字符,採用前面‘\+字母’的方式替換原字符
表達式 |
匹配特徵 |
\r |
回車 |
\n |
換行符 |
\t |
製表符 |
\\ |
代表\本身 |
\^ |
匹配^本身 |
\$ |
匹配$本身 |
\. |
匹配.本身 |
舉例:表達式"\$d",在匹配字符串"sas$d132",匹配結果:"$d",匹配位置:始於3,結束於5
二、多種匹配,匹配一次
1、固定的多種匹配(匹配一次)
表達式 |
匹配特徵 |
\d |
0~9的任意一個 |
\w |
A-Z,a-z,0-9,_中的任意一個 |
\s |
空格、製表符、換頁符的任意一個 |
. |
匹配除了\n外的任意一個 |
舉例:表達式"a.\d",匹配"123ab11d",匹配結果:"ab1",匹配位置:始於3,結束於6
2、自定義的多種匹配(匹配一次)
使用方括號[],意思是匹配方括號裏面的任意一個字符,[^]那就是匹配方括號裏面字符以外的任意一個字符
表達式 |
匹配特徵 |
[abc1] |
"a"、"b"、"c"、"1"中的任意一個字符 |
[^abc] |
除了"a"、"b"、"c"以外的任意一個字符 |
[a-f] |
a到f之間任意一個字符 |
[^a-f] |
除了a到f之間以外的任意一個字符 |
舉例:表達式"[^123][456]",匹配"12345678",匹配的結果"45",匹配位置:始於3,結束於5
思考:理解[]代表其中任意一個字符,^代表字符以外的任意字符即可
三、多種匹配,匹配多次
如果想要實現多次匹配,那麼就要告訴描述的表達式你想要匹配幾次,這個東西就是"次數修飾",有一點需要注意的是"次數修飾"放到"被修飾的表達式"後面
表達式 |
匹配特徵 |
{n} |
匹配n次 |
{m,n} |
匹配m~n之間的次數 |
{m,} |
匹配 >=m次 |
? |
匹配 0~1中間的次數 |
* |
匹配 >=0次 |
+ |
匹配 >=1次 |
舉例:表達式"\d?[ab]*",匹配"abc123",匹配結果:"ab"匹配始於0,結束於2
思考:次數修飾符放到表達式後面用以表示重複的次數即可
四、特殊匹配
表達式 |
意義 |
^ |
與字符串開始的地方匹配 |
$ |
與字符串結束的地方匹配 |
\b |
匹配一個單詞的邊界,也就是單詞和空格之間的位置(不匹配任何字符,一邊是\w,一邊是非\w) |
| |
前後2個表達式是"或"的關係 |
() |
1、在被修飾匹配次數的時候,括號代表一個整體 2、去匹配結果的時候,括號內的匹配內容可以被單獨取到 |
舉例1:表達式"\bstart\b",匹配"go,start,end",匹配結果是"start"
舉例2:表達式"(go)+",匹配"let's gogo",匹配結果是"go go"
舉例3:表達式"$(\d+\.\d*)",匹配"$12.33",匹配結果"$12.33"。單獨獲取括號裏面的內容:"12.33"