正則表達式中最常用的特殊字符包括^和$用于匹配邊界,.、d、w、s作為通配符,()和[]用于分組與集合,*、+、?、{n,m}控制重復次數,用來轉義特殊字符。^匹配起始位置,$匹配結束位置;.匹配任意字符,d匹配數字,w匹配字母數字或下劃線,s匹配空白;[]匹配括號內任意一個字符,()將多個字符視為整體;*表示0次或多次,+表示至少一次,?表示0次或1次,{n,m}指定次數范圍;需用對特殊字符進行轉義以匹配其字面值。掌握這些符號及其組合即可應對多數正則使用場景。
正則表達式里的特殊字符確實不少,而且它們各自有不同的含義和用法。如果你不熟悉這些符號,寫正則的時候很容易出錯或者達不到預期效果。下面我簡單說幾個最常用的特殊字符,以及怎么在實際中使用它們。
匹配邊界:^ 和 $
這兩個符號用于指定字符串的起始和結束位置。
比如你想匹配一整行剛好是“hello”的內容,而不是包含“hello”的其他內容,可以這樣寫:
^hello$
- ^hello 表示以“hello”開頭;
- hello$ 表示以“hello”結尾;
- 同時加上兩個符號就表示“整個字符串只能是hello”。
這個技巧在驗證輸入格式(如郵箱、手機號)時非常有用,避免出現部分匹配的問題。
通配符:.、d、w、s
這些是用來匹配特定類型字符的簡寫方式:
- . 匹配任意一個字符(除了換行);
- d 匹配數字,等價于 [0-9];
- w 匹配字母、數字或下劃線,相當于 [a-zA-Z0-9_];
- s 匹配空白字符,包括空格、制表符、換行等。
舉個例子,如果你想匹配類似IP地址中的數字段,可以用 d{1,3}.d{1,3}.d{1,3}.d{1,3}。不過要注意點號 . 是特殊字符,如果想匹配字面意義的點,需要加反斜杠轉義。
分組與重復:()、[]、*、+、?、{n,m}
這部分是構建復雜規則的關鍵:
- [] 表示匹配括號內的任意一個字符,例如 [abc] 只匹配 a、b 或 c;
- () 是分組,把多個字符當做一個整體來處理;
- * 表示前一個元素出現0次或多次;
- + 表示至少出現一次;
- ? 表示可有可無(0次或1次);
- {n,m} 指定次數范圍,比如 d{3,5} 表示3到5個數字。
常見用途比如匹配電話號碼、身份證號等固定長度的字符串,或者提取網頁標簽里的內容。
轉義字符:
有些字符本身是正則語法的一部分,比如上面提到的 .、*、+ 等。如果你想匹配這些字符本身的字面意思,就需要在前面加一個反斜杠 來轉義。
例如:
- 匹配郵箱地址中的點號 .com,應該寫成 .;
- 匹配左括號 (,就要寫成 (。
如果不轉義,這些字符會被當作正則語法處理,容易導致匹配結果不符合預期。
基本上就這些。掌握這幾個常用符號,再結合具體場景組合使用,就能寫出大多數日常需要用到的正則表達式了。