正規表示式

2021-10-07 11:14:32 字數 2157 閱讀 6146

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集合中得到(用\nn為數字表示前面第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正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...