perlRegex

來源:互聯網
上載者:User


  預設情況下,m//運算子嘗試匹配指定的模式和$_中的文本。 例如:在使用者輸入的文本中尋找字串exit(第二個反斜線之後的i修飾符是的模式比對不區分大小寫)。如果在$_中找到exit,則m//返回真;

print"\n---------------------------(m//) Demo------------------------\n"; print "Enter:"; while(<>){ if(m/exit/i){exit;} }


 

=~:運算子指定m//運算子尋找的字串。在這裡,指定運算子應該尋找標量$line,而不是$_。這段代碼沒有改變$line的值:

print"\n---------------------------(m//) and(=~)Demo------------------------\n"; print "Enter:"; while($line=<>){ if($line=~m/exit/i){exit;} }


 

!~:運算子對=~的傳回值取反。

print"\n---------------------------(m//) and(=~) (!)Demo------------------------\n"; print "Enter:"; while($line=<>){ if(!($line=~m/exit/i)){exit;} }


 

m//運算子使用頻繁,可以忽略掉m部分,多數程式使用如下捷徑:

 print "\n---------------------------(m//)and(=~) (!) Demo------------------------\n"; print "Enter:"; while($line=<>){ if($line=~/exit/i){exit;} }


 

與其他perl運算子一樣,如果你不喜歡斜線,可以使用自己的定界符,在這種情況下必須使用m;

 

print"\n---------------------------User Defined LimiteNotation------------------------\n"; print "Enter:"; while($line=<>){ if($line=~ m{exit}i){exit;} }


PS:在標量上下文中,m//返回真或者假;在表的上下文中,如果使用“g”修飾符來進行全域尋找,則m//返回所有匹配值的列表。

例如,建立一個數組@a,它將容納$_中的所有小寫單詞;

print"\n-----Use 'g ' to find list match value------\n";$_="Hereis the text";@a=m/\b[^A-Z]+\b/g;print"@a";print"\n-----END------\n";


對上面子程式解析如下:

\b:匹配單詞範圍

[^A-Z]:匹配除了大寫字母以外的任何字元;

+:確保可以找到多個匹配值;

g修飾符:說明是全域尋找,全域尋找可以尋找所有連續的匹配值。


 s///運算子可以用一個字串替換另一個字串。

 例如:用字串old替換了字串young

print"\n--------------------------(s///)USED-----------------------------\n";$text_young="Prettyyoung.";print"$text_young\n";$text_young=~s/young/old/;print"$text_young\n";print"\n------------------------END (s///)USED---------------------------\n";


PS:m//和s///是從左邊開始匹配。

----------------------------------------------------tr///運算子--------------------------------------------------------------

$text="His name is Tom.";$text=~tr/o/j/;print $text."\n";print"\n------------------------END (tr///)USED---------------------------\n";


 

Regex:\b([A-Za-z]+)\b在文本字串中匹配單詞:

print "\n--------------------------(\b([A-Za-z]+)\b)USED-----------------------------\n";$text="Prettyyoung.";print"$text_young\n";$text=~/\b([A-Za-z]+)\b/;print"$1\n";print"\n------------------------END (\b([A-Za-z]+)\b)USED---------------------------\n";


例子解析:

運算式(\b([A-Za-z]+)\b)包含分組元字元、\b邊界元字元和字元類[A-Za-z](匹配所有的大寫和小寫字母)和量詞+,它指定在已指定的字元類中尋找一個或多個字元。

perl記住一個匹配,前面的代碼稱之為$1,並列印字串中的第一個單詞。

 

在Regex中,任何單個字元都與自身匹配,除非它是具有特殊含義的元字元(例如$和^)

 

print"\n--------------------------('$ and ^')USED-----------------------------\n"; while(<>){ if(m/^exit$/i){   {exit;} }} print "\n------------------------END ('$and ^') USED---------------------------\n";


 

perl中特殊字元:

 \077-------------8進位字元

 \a-------------警示(鈴聲)

 \c[-------------控制字元

 \D-------------匹配非數字字元

 \d-------------匹配數字字元

 \E-------------啟用模式元字元

 \e-------------轉義

 \f-------------換頁

 \L-------------小寫,直至遇到\E

 \l-------------小寫下一個字元

 \n-------------換行

 \Q-------------引用(禁止)模式元字元,直至遇到\E

 \r-------------斷行符號

 \S-------------匹配非空白字元

 \s-------------匹配空白字元

 \t-------------製表位

 \U-------------大寫,直至遇到\E

 \u-------------大寫下一個字元

 \W-------------匹配非單詞字元

 \w-------------匹配一個單詞字元(字母數字字元和“_”)

 \xl-------------16進位字元

 

PS:\w僅匹配一個字母數字字元,而不是單詞,為了匹配單詞,需要這樣使用\w+(匹配一個或多個):

print"\n--------------------------(\w+)USED-----------------------------\n";$text="Prettyyoung.";print"$text_young\n";$text=~s/\w+/There/;print"$text\n";print"\n------------------------END (\w+)USED---------------------------\n";


 

匹配任何字元:‘.’。這個字元可以匹配任一字元,但分行符號除外(但是如果與m//和s///一起使用s字元修飾符,句點字元和換行匹配)

用*替換字串中的所有字元,g修飾符可以使替換操作在全域範圍內進行。

print"\n--------------------------(.)USED-----------------------------\n";$text="Prettyyoung.";print"$text\n";$text=~s/./*/g;print"$text\n";print"\n------------------------END (.)USED---------------------------\n";


 

諸如句點這樣的字元在Regex中稱為元字元(元字元包括:\|()[{^$*+?.),僅需在它們前面加入反斜線,就可以確保按照字面意義解釋,而不是作為元字元解釋。

‘^’:匹配行首,讓使用者知道不應該用句點開始的句子。

print"\n--------------------------(^)USED-----------------------------\n";$text=".Prettyyoung.";print"$text\n";if($text=~m/^\./){print"Should't start a sentence with a period!";}print"\n------------------------END (^)USED---------------------------\n";


 

從C代碼中刪除注釋,方法是通過使用*量詞和.來代表任意數量的類似字元,以匹配定界符/*和*/之間的所有字元。

print"\n--------------------------(* and .)USED-----------------------------\n";$text="count++;/*Increment count*/";$text=~s/\/\*.*\*\///g;


或者使用

$text=~s|\/\*.*\*\/||g;print $text;print"\n------------------------END (* and .)USED---------------------------\n";


 

可以使用多個字元組成字元類,而那個類將匹配其中的任一字元。字元類要包含在[字元類]中。也可以使用-字元指定字元範圍

print"\n--------------------------([zi fu yuan zu ])USED-----------------------------\n";$text="count++;/*Increment count*/";if($text=~/[couIite]/){print"Yep,we got vowels.\n";}print"\n------------------------END ([zi fu yuan zu ])USED---------------------------\n";


如果使用^作為字元類中的第一個字元,則那個字元類將匹配其中沒有的任何字元,在下面的例子,僅匹配了既不是字母也不是空白的字元:

print"\n--------------------------([^A-Za-z\s]+)USED-----------------------------\n";$text="count200 Increment 000 count ";$text=~s/[^A-Za-z\s]+/521/;print $text;print"\n------------------------END ([^A-Za-z\s]+)USED---------------------------\n";


 

提取$_中的全部小寫單詞,並將它們儲存在新數組@a中:

print"\n--------------------------(\b[^A-Z]+\b)USED-----------------------------\n";$_="Hereis the text";@a=~m/\b[^A-Z]+\b/g;print @a;print"\n--------------------------end (\b[^A-Z]+\b) USED-----------------------------\n";


PS:使用\b匹配單詞邊界

通過將特定字元或者字元序列作為Regex中的文字或者字元類,就可以匹配特定字元或者字元序列。

多重匹配模式:可以為模式指定一系列的選項,並用|分開個選項。例如,可以這樣檢查使用者輸入是否為"exit","quit","stop"

 

print "\n--------------------------(|)USED-----------------------------\n"; print "Enter exit|quit|stop:"; while(<>){ if(m/exit|quit|stop/){exit;} } print "\n--------------------------END(|) USED--------------------------\n";  print "\n--------------------------(|)USED-----------------------------\n"; print "Enter exit|quit|stop:"; while(<>){ if(m/^(exit|quit|stop)$/){exit;} } print "\n--------------------------END(|) USED--------------------------\n";

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.