大家用過unix或者linux系統,對vi,sed,grep,awk等使用工具不會陌生,應該了解用於定界符搜索模式的正則表達式和元字符。那么什么是正則表達式呢?正則表達式是一種序列或者字符模式,負責在搜索或者替換文本時對文本內容進行字符串匹配。簡單的正則表達式直接由待匹配字符串或字符集構成。
正則表達式一般以斜杠(/)做界定符。實際上任何字符串都可以成為界定符。例如:/abc/, ?abc?
表達式修飾符與簡單語句
常見修飾符:if unless while until foreach
if條件修飾符
格式 Expression2 if Expression1 如果Expression1表達式為真,則執行Expression2表達式內容。
demo
(1) $x=5;
print $x if x==5; ====>輸出5
(2) $_="xabcy\n";
print if /abc/; ====>輸出xabcy
(3) $_="I lost my gloves in the clover.";
print "Found love in gloves!\n" if /love/; ====>輸出Found love in gloves!
unless修飾符
格式 Expression2 unless Expression1 如果Expression1為假,則執行Expression2表達式內容。
demo
(1) $x=5;
print $x unless $x==6; ====>輸出5
while循環修飾符
格式 Expression2 while Expression1 只要第一個表達式為真,while循環修飾符便會重復執行第二個表達式。
demo
(1) $x=1;
print $x++,"\n" while $x!=5; ====>輸出1,2,3,4
until修飾符
格式 Expression2 until Expression1 只要第一個表達式為假, while循環修飾符便會重復執行第二個表達式
demo
(1) $x=1;
print $x++,"/n" until $x==5; ====>輸出1,2,3,4
foreach修飾符
會逐個判斷列表中每個元素的值,並通過標量$_以此引用各個列表元素。
demo
(1) @alpha=(a .. z,"\n");
print foreach @alpha; ====>abcdefghijkmnopqrstuvwxyz
正則表達式運算符
m運算符與匹配
demo
(1) while (<DATA>){
print if /Betty/ ====>輸出 Betty Boop
}
__DATA__
Steve Blenheim
Betty Boop
Igor Chevsky
Norma Cord
(2)while (<DATA>){
print if m#Jon#; ====>輸出Jon DeLoach
}
__DATA__
Steve Blenheim
Betty Boop
Igor Chevsky
Norma Cord
Jon DeLoach
g全局修飾符
i修飾符:大小寫不敏感
demo
(1)$_="I lost my gloves in the clover,Love.";
@list=/love/gi;
print "@list . \n"; ====>love love Love
x表達修飾符用於在正則表達式中放入注釋或者空白字符,以便讓正則表達式含義更明確。
demo
(1) $_="San Francisco to Hong Kong \n";
/Francisco
/x;
print "Comments and spaces were removed and \$& is $&\n"; ====>輸出Comments and spaces were removed and $& is Francisco
S運算符與替換
demo
(1)$_="knock at heaven's door. \n";
s/knock/"knock," *2."knocking"/ei;
print "He's $_"; ====>He's knock,knock,knocking at heaven's door.
模式綁定運算符
=~ !~
demo
(1) while($_=<DATA>){
print $_if $_=~/Igor/; ====>輸出Igor Chevsky
}
__DATA__
Steve Blenheim
Betty Boop
Igor Chevsky
Norma Cord
(2) while ($_=<DATA>){
print $_ if $_!~/Igor/; ====>輸入除Igor Chevsky以外的名稱
}
__DATA__
Steve Blenheim
Betty Boop
Igor Chevsky
Norma Cord