強大的Perl中的正則

2021-04-25 11:10:23 字數 3036 閱讀 7279

perl的正則是相當強大的

perl 程式中,正規表示式有三種存在形式

分別是(1模式匹配:m//     #平時我們簡寫 // ,略去m,

三個引數

/i不區分大小寫

/s匹配任何字元

/x新增空格

(2模式替換:s///

/g    進行全域性替換

/u     大小寫轉換,例如s/(fred|barney)//u$1/gi;

/l    轉換小寫

/e    影響到剩餘的(替換的)字串

/l 和/u    寫形式時(/l 和/u),只作用於下乙個字元

(3模式轉化:tr///

這三種形式一般都和 =~ 或 !~ 搭配使用,"=~" 表示相匹配(does),"!~" 表示不匹配(doesn't),並在左側有待處理的標量變數。如果沒有該要處理的變數,則預設為處理 $_ 變數中的內容。

表示式中的一些常用模式。

/表示式/結果.

匹配除換行符以外的所有字元

x?匹配 0 次或一次 x 字串

x*匹配 0 次或多次 x 字串,但匹配可能的最少次數

x+匹配 1 次或多次 x 字串,但匹配可能的最少次數

.*匹配 0 次或多次的任何字元

.+匹配 1 次或多次的任何字元

匹配剛好是 m 個 的指定字串

匹配在 m個 以上 n個 以下 的指定字串

匹配 m個 以上 的指定字串

匹配符合 內的字元

[^]匹配不符合 內的字元

[0-9]

匹配所有數字字元

[a-z]

匹配所有小寫字母字元

[^0-9]

匹配所有非數字字元

[^a-z]

匹配所有非小寫字母字元

^匹配字元開頭的字元

$匹配字元結尾的字元

/d匹配乙個數字的字元,和 [0-9] 語法一樣

/d+匹配多個數字字串,和 [0-9]+ 語法一樣

/d非數字,其他同 /d

/d+非數字,其他同 /d+

/w英文本母或數字的字串,和 [a-za-z0-9] 語法一樣

/w+和 [a-za-z0-9]+ 語法一樣

/w非英文本母或數字的字串,和 [^a-za-z0-9] 語法一樣

/w+和 [^a-za-z0-9]+ 語法一樣

/s空格,和 [/n/t/r/f] 語法一樣

/s+和 [/n/t/r/f]+ 一樣

/s非空格,和 [^/n/t/r/f] 語法一樣

/s+和 [^/n/t/r/f]+ 語法一樣

/b匹配以英文本母,數字為邊界的字串

/b匹配不以英文本母,數值為邊界的字串

a|b|c

匹配符合a字元 或是b字元 或是c字元 的字串

abc匹配含有 abc 的字串

(pattern)

() 這個符號會記住所找尋到的字串,是乙個很實用的語法。第乙個 () 內所找到的字串變成 $1 這個變數或是 /1 變數,第二個 () 內所找到的字串變成 $2 這個變數或是 /2 變數,以此類推下去。

/pattern/i

i 這個引數表示忽略英文大小寫,也就是在匹配字串的時候,不考慮英文的大小寫問題。

/如果要在 pattern 模式中找尋乙個特殊字元,如 "*",則要在這個字元前加上 / 符號,這樣才會讓特殊字元失效

*?  +?   ??  為這三個數量詞的非貪婪的型別

perl處理完後會給匹配到的值存在三個特殊變數名

$&, $`, $'。匹配上的那部分字串將自動儲存在$&之中.變數$1 中的值為 there,而$&為整個被匹配的部分,匹配部分的前一部分存放在$`之中,後一部分被存到$'。另一種說法是,$`中含有正規表示式引擎在匹配成功前所找到的變數,而$'為此模式還沒有匹配的剩餘部分。如果將這三個變數放在一起,你將得到原始字串

括號的特殊用法

(?#text) 忽略括號內的注釋文字;

(?:pattern) 與組一致,但匹配時不生成$1,$2;

(?imsx:pattern) 與組一致,但匹配時不生成$1,$2,在特定的風格有效期間,內嵌風格匹配修飾符;

(?=pattern) 前看宣告,如果正規表示式在下一次匹配 pattern 風格,就開始匹配,而且不影響匹配效果。如//w+(?=/t)/將匹配製表符是否恰好在乙個字/w+後面出現,並且製表符不新增到$&的值中;

(?!pattern) 如果正規表示式在後面不匹配 pattern ,才會開始匹配。如/foo(?!bar)/,只有當出現 foo,並且後面不出現 bar 時才開始匹配;

(?<=pattern) 後看宣告,只有在pattern已經匹配下面的表示式,並且不將 pattern 的結果放入$&變數中,才匹配下面的語句。如/(?<=/t)/w+/匹配製表符是否恰好在/w+前出現,但又不將製表符送到$& 中;

(? (?) 表示對 code 的使用是試驗性的。如果返回真,就認為是與(?:pattern)斷言同一行裡的匹配。code 不插入變數。這個斷言僅僅在 use re 'eval' 編譯指示符時才有效;

(?>pattern) 如果型別鎖定在當前位置,就使用單獨的 pattern 匹配子字串。如正規表示式/^(?>a*)ab/永遠不會匹配,因為語句(?>a*)將匹配字串開頭所有的 a 字元,並刪除與 ab 匹配的字元 a;

(!<=pattern) 非後看宣告,與後看宣告意思相反;

(!=pattern) 非前看宣告,與前看宣告意思相反;

(?(condition)yes-pattern|no-pattern) 條件表示式——條件語句或者是乙個圓括號中的整數,或者是乙個斷言;

(?(condition)yes-pattern)

(?imsx) 嵌入風格匹配修飾符。當要把表示式修改符嵌入在變數中,然後把變數用在不指定自己的修飾符的一般規則表示式中;

(?-imsx) 這個斷言很有用——後面帶任何內容都會關閉修飾符,直到出現另乙個嵌入的修飾符。

fei 正規表示式 Perl中強大的正規表示式

perl的正則是相當強大的 perl 程式中,正規表示式有三種存在形式 分別是 1模式匹配 m 平時我們簡寫 略去m,三個引數 i不區分大小寫 s匹配任何字元 x新增空格 2 模式替換 s g 進行全域性替換 u 大小寫轉換,例如s fred barney u 1 gi l 轉換小寫 e 影響到剩餘...

perl中的正則匹配

一 簡介 模式指在字串中尋找的特定序列的字元,由反斜線包含 def 即模式def。其用法如結合函式split將字串用某模式分成多個單詞 array split line 二 匹配操作 匹配操作符 檢驗匹配是否成功 result var abc 若在該字串中找到了該模式,則返回非零值,即true,不匹...

Perl中的正規表示式

1.perl 中的正規表示式 正規表示式 regular expression 描述了一種字串匹配的模式,可以用來檢查乙個串是否含有某種子串 將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。perl語言的正規表示式功能非常強大,基本上是常用語言中最強大的,很多語言設計正則式支援的時候都參考...