Perl正則表達式學習筆記正則表達式
正則表達式以「m」進行匹配,簡易模式的能夠用「/.../」來撰寫模式。可使用m<...> 、m[],m{}...建議使用簡易模式或m{},且m{}可以方便調試。函數
元符號學習
在正則表達式中具備特殊意義的符號。測試
「.」,通配符,匹配換行符(\n)之外的全部單個字符。只匹配一個字符。spa
反斜線是第二個元字符。調試
在正則表達式中想要使用這些元字符的自己的符號意義,必須在使用前加上反斜線,否則就是特殊意義。內存
量詞字符串
星號(*)會匹配它的前一項的0次或屢次。string
加號(+)會匹配它的前一項的1次或屢次。it
問號(?)會匹配它的前一項的0次或1次。
模式組
圓括號也是元符號。將括號內的元素視爲一個單獨的總體
擇一模式
豎線(|)爲「或」,表示左邊匹配或右邊匹配。
字符集
用方括號括起來的一連串可能的字符。只匹配單一字符,但能夠是字符集中的任意一個。
字符集簡寫
0-9 \d
A-Za-z0-9_ \w「以普通字母,數字和下劃線組成的word」,\w只是匹配單詞裏的一個字符,用匹配整個單詞,要使用加號修飾符進行。
[\f\t\n\r] 換頁,製表,換行,回車以及空格 \s,匹配單一字符,比較常見的用法是/s*來匹配任意數目的空白
在[]字符集中「^」表示反義
[^\d]非數字的字符 [\D]
[^\w]非單詞的字符 [\W]
[^\s]非空格的字符 [\S]
選項修飾符
/i 進行不區分大小寫的模式匹配
/s 匹配任意字符 將模式中的點好所有轉換成[\d\D]
/x 加上空白 容許在模式中隨意的加上空白
組合選項修飾符
組合使用s,i,x來達到想要的效果
錨點
插入符號(^)是用來標示字符串的開頭的錨點,美圓符號是($)是標示字符串的結尾的錨點。
單詞的錨點
\b是單詞的邊界的錨點 用來匹配單詞的頭尾兩端
\B非單詞邊界錨點
綁定操做符=~
匹配$_只是默認的方式
告訴拿右邊的匹配左邊的字符串
模式內的內插
匹配變量
圓括號不只具備能夠用來表示不一樣的分組,還可以啓動正則表達式的記憶功能,他的記憶功能是把括號裏的模式所實際匹配到的部分字符串暫時記下來,系統會根據括號的多少產生相應的標誌變量,格式爲$1,$2...若是在引用的時候超出了範圍則是undef值。這些值會保存到下次匹配的成功時。
自動匹配變量
系統內置的變量,分別爲$`,$&,$',三個的含義分別是前置的字符串,匹配的字符串和後置的字符串。
通用量詞
* {0,}
+ {1,}
? {0,1}
優先級
1.括號(最高)
2.量詞
3.錨點和序列
4.分隔用的豎線
注:量詞在沒有括號是隻是匹配前面的一個字符
模式測試程序
While(<>) {
If (/your patter goes here/) {
Print "|$`<$&>$'";
}
Else {
Print "no match!";
}
}
以s///進行替換
以/g進行全局替換
大小寫轉換
\U轉義字符會將其後的全部字符轉換成大寫
\L轉義字符會將其後的全部字符轉換成小寫
\E關閉大小寫的轉換的功能
\l和\u只會影響以後的第一個字符
組合使用 \u\L表示所有轉小寫,但第一個字母大寫
split操做符
根據分隔符來拆分一個字符串
用法以下:
@fields = split /separator/,$string;
註釋:split操做符將會以做爲分隔符的模式掃過所指定的字符串,而且返回有該分隔符所分隔的一串字段。
Split會保留開頭的空字段,但不會保留結尾的空字段
默認空白字符,等於以/\s+/爲模式,但會省略開頭的空字段。
my @fields = split;#等於split /\s+/,$_;
也可使用空格來代替 split ' ',$String;
Join函數
將字符片斷聯合成一個字符串。
第一個參數是膠水,是字符串,不是模式,用來作各個字符串之間的粘合劑。
列表上下文中的m//
在列表上下文中使用模式匹配操做符(m//)時,若是模式匹配成功,則其所返回的列表內容是全部的內存變量的內容;若是匹配失敗,則會返回空列表。
非貪心的量詞
*,+都是貪心量詞,它們匹配是最大的長度。
*?,+?是非貪心的量詞,它們匹配最短的長度。
跨行的模式匹配
^和$這兩個錨點本來表明整個字符串的頭和尾。在模式加上/m修飾符以後,就可讓它們也表明換行符。表明的是每行的開頭和結尾。
一次更新多個文件
特殊變量$^I
$^I不爲空則是加在原文件名的後面產生一個新的文件就是改動原文件的備份文件。若是爲空則是在原文件上進行改動。
不具記憶功能的圓括號
有時候咱們會由於內存變量的個數太多而混亂,其實你不須要那麼多,有的圓括號只是用來做模式的分組。
(?:內容)這就是不帶記憶功能的圓括號。
點號默認不匹配換行符