1. 語法
1.1 元字元
字元描述
\將下乙個字元標記為乙個特殊字元、或乙個原義字元、或乙個向後引用、或乙個八進位制轉義符。例如: \n 匹配乙個換行符
^匹配輸入字串的開始位置
$匹配輸入字串的結束位置
*匹配前面的子表示式零次或多次。例如 zo*能匹配 z 以及 zoo
+匹配前面的子表示式一次或多次。例如 zo*能匹配 zo 以及 zoo,不能匹配 z
?匹配前面的子表示式零次或一次。例如 do(es)?可以匹配 do 或 does
n是非負整數。匹配確定的n次。例如 o 不能匹配 bob 中的 o,但是能匹配 food 中的兩個 o
n是乙個非負整數。至少匹配n次。例如 o 不能匹配 bob 中的 o,但是能匹配 fooooood 中所有 o
m和n均為非負整數,n<=m。最少匹配 n 次且最多匹配 m 次,注意逗號和兩個數之間不能有空格
?當該字元緊跟在任何乙個其他限制符(*,+,?,,,)後面時,匹配模式是非貪婪的。非貪婪模式盡可能少得匹配所搜尋的字串。預設的貪婪模式則盡可能多地匹配所搜尋的字串
.匹配除換行符(\r,\n)之外的任何單個字元。如果要匹配包括換行符在內的任何字元,可使用(.|\n)這種模式
(pattern)
子表示式,匹配pattern並獲取這一匹配。所獲取的匹配從產生的matches集合中得到(用\n
n為數字表示前面第n個組的結果),匹配圓括號需要轉義
(?:pattern)
匹配pattern但是不獲取匹配結果
(?=pattern)
正向肯定預查,在任何匹配pattern的字串開始處匹配查詢字串,非獲取匹配。例如 "windows(?=95|98|nt|2000)"能匹配 「windows2000"中的windows 但是不能匹配"windows3.1"中的"windows」。預查不消耗字元,即預查的下一次匹配不是從包含預查的字元之後開始
(?!pattern)
正向否定預查,非獲取匹配。在任何不匹配pattern的字串開始處匹配查詢字串。例如 "windows(?=95|98|nt|2000)"能匹配 「windows3.1"中的windows 但是不能匹配"windows2000"中的"windows」
(?<=pattern)
反向肯定預查,與正向肯定預查類似,只是方向相反。例如 「(?<95|98|2000)windows"能匹配"2000windows"中的"windows」,但不能匹配"3.1windows"中的"windows"
(?反向否定預查,與正向否定預查類似
x|y匹配 x 或 y
[xyz]
字元集合。匹配所包含的任意乙個字元
[^xyz]
負值字元集合。匹配未包含的任意字元
[a-z]
字元範圍。匹配指定範圍內的任意字元
[^a-z]
負值字元範圍。匹配任何不在指定範圍內的任意字元
\b匹配乙個單詞邊界。例如er\b可以匹配never中的er,匹配不到verb中的er
\b匹配非單詞邊界
\cx匹配由x指明的控制字元。(????????)
\d匹配乙個數字字元。等價於[0-9]
\d匹配乙個非數字字元。等價於[^0-9]
\f匹配乙個換頁符。等價於 \x0a和\cl
\n匹配乙個換行符
\r匹配乙個回車符
\s匹配任何空白字元,包括空格、製表符、換頁符等。等價於[ \f\n\r\t\v]
\s匹配任何非空白字元
\t匹配乙個製表符
\v匹配乙個垂直製表符
\w匹配字母數字下劃線
\w匹配非字母、數字、下劃線
\xn匹配n,其中n為十六進製制轉義值,必須是確定的兩個數字長。例如 \x41匹配 「a」
\un匹配n, 其中n是乙個用4個十六進製制數字表示的unicode字元。
1.2 運算優先順序
最高到最低如下:
運算子描述
\轉義符
(), (?: ) ,(?=),
圓括號和方括號
*,+,?,,,
限定符^,$,\任何元字元、任何字元
定位點和序列
|或操作
1.3 匹配規則
2. 示例
以下兩個例子很好得說明了正向肯定預查的用法:
其他比較有用的正規表示式
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...