正則表達式中的量詞包括、+、?、{},用于控制字符或分組的匹配次數;1.表示前一個字符出現0次或多次;2.+表示至少出現1次;3.?表示0次或1次;4.{}可精確控制次數,如{n}恰好n次,{n,}至少n次,{n,m}介于n至m次;貪婪模式會盡可能多匹配內容,而非貪婪模式(加?)則相反;實際應用中需注意分組整體匹配應使用括號包裹,不確定部分可用?處理,同時需謹慎使用貪婪與非貪婪模式以避免誤匹配。
正則表達式中的量詞用來控制匹配次數,比如一個字符或一組字符要出現多少次才算匹配成功。掌握這些量詞能讓你寫出更靈活、更精準的正則表達式。
常見量詞及基本用法
正則里的量詞主要有這么幾個:*、+、?、{},它們分別代表不同的重復次數:
-
*:前一個字符出現 0 次或多次
比如 /go*/ 可以匹配 “g”、”go”、”goo” 等。 -
+:前一個字符出現 1 次或多次
比如 /go+/ 可以匹配 “go”、”goo”,但不能匹配只有 “g” 的情況。 -
?:前一個字符出現 0 次或 1 次
比如 /colou?r/ 可以同時匹配 “color” 和 “colour”。 -
{}:精確控制出現次數
- {n}:恰好 n 次,如 /a{3}/ 匹配 “aaa”,不匹配 “aa” 或 “aaaa”
- {n,}:至少 n 次
- {n,m}:至少 n 次,最多 m 次
這些量詞通常跟在字符、分組或字符類后面使用,非常實用。
貪婪與非貪婪模式的區別
默認情況下,正則表達式是“貪婪”的,也就是盡可能多地匹配內容。比如:
- 正則:/<.>/
輸入:text
結果會匹配整個 text,而不是只匹配第一個 或單獨匹配 和 。
如果你希望它盡可能少地匹配,可以加上 ?,變成“非貪婪”模式:
- 正則:/<.>/
- 同樣輸入會分別匹配 和 。
這個區別在處理 html 或日志文件時特別重要,一不小心就可能匹配到你不想看到的內容。
實際應用建議
在寫正則的時候,有幾個小技巧可以避免踩坑:
- 如果你想匹配的是具體字符,比如 “a” 出現三次,直接寫 /a{3}/ 就行了。
- 如果匹配的是多個字符組成的整體,記得用括號包裹起來,再加量詞。比如 /abc/{3}/ 是錯的,正確寫法是 /(abc){3}/,表示 “abc” 整體出現三次。
- 在不確定有沒有某部分文本的時候,用 ? 非常方便。例如,電話號碼中可能有區號也可能沒有,可以用 d{3}-?d{8} 來匹配。
- 處理大量文本時,注意貪婪和非貪婪的影響,尤其是跨行匹配的情況。
基本上就這些。量詞雖然不多,但組合起來很靈活,關鍵是理解每個符號的意義,并根據實際需求選擇合適的寫法。