學習perl(5)
學習Perl (5)
今天下午幹別的事情去了
以正規表示式進行匹配
1)以m//進行匹配
以/i來進行不區分大小寫的模式匹配:
#!/usr/bin/perl -w
print "Would you like to play a game?";
chomp($_ =
if (/yes/i) {
print "In that case,I recommend that you go bowling.n";
}
以/s來匹配任意字元:
#!/usr/bin/perl -w
$_ = "I saw Barneyndown at the bowling alleynwith frednlast night.n";
if (/Barney.*Fred/s) {
print "That string mentions Fred after Barney!n";
}
用/x來加上空白:
/ -? d+ .? d* /x
組合選項修飾符:
#!/usr/bin/perl -w
while (<>) {
if (/barney.*fred/si) {
print "That string mentions Fred after Barney!n";
}
}
2)錨點
插入標記(^)是一個錨點,用來標示字串的開頭,而美元符號($)則用來標示字串的結尾,如:/^fred/ 和 /rock$/。/^s*$/,這代表一個空白行。
單詞錨點:b是單詞邊界錨點,它所匹配的是一個單詞頭尾兩端,如:/bfredb/。此處所謂的“單詞“是指一連串的字母、數字和下劃線的組合,也就是匹配/w+/模式的字串。
B是非單詞邊界符,它會匹配任何不匹配b的位置,如:/bserchB/。
繫結運算子=~
用來告訴Perl拿右邊的模式來匹配左邊的字串:
#!/usr/bin/perl -w
print "Do you like Perl?(yes/no)";
my $likes_perl = (
if ($likes_perl) {
print "You said earlier that you like Perl,so ...n";
}
模式內的內插:正規表示式裡可以進行雙引號形式的內插,類似grep的程式:
#!/usr/bin/perl -w
my $what = "larry";
while (<>) {
if (/^($what)/) {
print "We saw $what in beginning of:$_";
}
}
3)匹配變數
匹配變數所儲存的都是字串,所以它們都是標量變數。在Perl裡,它們的命名方式像$1或$2。模式裡的括號有多少對,匹配變數就有多少個。
#!/usr/bin/perl -w
$_ = "Hello there,neighbor";
if (/s(w+),/) {
print "the word was $1n";
}
#!/usr/bin/perl -w
$_ = "Hello there, neighbor";
if (/(S+) (S+), (S+)/) {
print "words were $1 $2 $3n";
}
自動匹配變數:$&、$`、$’,字串裡實際匹配模式的部分會被自動存進$&裡。
#!/usr/bin/perl -w
if ("Hello there, neighbor" =~ /s(w+),/) {
print "That actually matched '$&'.n"; # That actually matched ' there,'.
print "That was ($`)($&)($').n"; # That was (Hello)( there,)( neighbor).
}
第一份記憶儲存在$1,但$&裡匹配到的是整個段落。相符段落的前置字串會存到$`裡,而後置字串則存在$’裡。
匹配變數(包括自動匹配變數和有編號的匹配變數)最常用在替換運算中。
通用量詞:
模式/a{5,15}/可匹配重複出現5到15次的字母a;如果省略第二個數字(但包含逗號),則表示沒有上限,如:/(fred){3,}/;還可以是固定次數,如:/w{8}/
量詞*、+、?是簡寫:星號和量詞{0}相同,加號相當於{1},問號也可以寫成{0,1}。
4)優先順序
最高等級是括號(),用於劃分組以及儲存;第二個等級是量詞,也就是反覆運算子(包括星號、加號、問號和花括號量詞);第三級是錨點與序列(包括^、$、b、B);最低以及是分隔用的豎線(|)。
優先順序的範例:/^fred|barney$/與/^(fred|barney)$/;/^(w+)s+(w+)$/
5)模式測試程式
下面是一個有用的程式,可以用來檢測某些字串是否匹配所指定的模式:
#!/usr/bin/perl -w
while (<>) {
chomp;
if (/YOUR_PATTERN_GOES_HERE/) {
print "Matched:|$`$'|n";
} else {
print "No matched : |$_|n";
}
}
假設你所使用的模式是/match/,所輸入的字串是beforematchafter,結果為Matched:|before
習題:
1)#!/usr/bin/perl -w
while (<>) {
chomp;
if (/match/) {
print "Matched:|$`$'|n";
} else {
print "No matched : |$_|n";
}
}
2)#!/usr/bin/perl -w
while (<>) {
chomp;
if (/(w+)a$/) {
print "Matched:|$`$'|n";
} else {
print "No matched : |$_|n";
}
}
參考答案如下:
#!/usr/bin/perl -w
while (<>) {
chomp;
if (/ab/) {
print "Matched:|$`$'|n";
} else {
print "No matched : |$_|n";
}
}
3)#!/usr/bin/perl -w
while (<>) {
chomp;
if (/(w+)a$/) {
print "The result: '$_'n";
}
}
參考答案如下:
#!/usr/bin/perl -w
while (
chomp;
if (/(bw*ab)/) {
print "Matched:|$`$'|n";
print "$1 contains '$1'n";
} else {
print "No matched : |$_|n";
}
}
5) #!/usr/bin/perl -w
while (<>) {
chomp;
if (/(s+)$/) {
print "'$`'n";
}
}
參考答案如下:
#!/usr/bin/perl -w
while (<>) {
chomp;
if (/s+$/) {
print "$_#n";
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21256317/viewspace-776993/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學習perl(6)
- 學習Perl(4)
- 學習perl(3)
- 學習perl(2)
- perl6學習
- Perl語言學習(四)Perl控制結構
- perl DBI 學習總結
- perl學習筆記1筆記
- perl學習筆記(7)筆記
- perl學習筆記---標量筆記
- 10步學習Perl 第一課
- PERL學習筆記---正規表示式筆記
- Perl學習筆記(五)——關聯陣列筆記陣列
- perl學習筆記--搭建開發環境筆記開發環境
- perl DBI DBD和java 的JDBC對比學習JavaJDBC
- use vs require in Perl5UI
- PERL學習筆記---正規表示式的應用筆記
- [譯][Perl 6] 5to6-perlfunc
- [譯][Perl 6] 5to6-nutshell
- Perl5的包和模組
- Angr學習(5)
- 樹學習(5)
- perl除錯哲學(轉)除錯
- 5/7學習程序
- 5/20學習程序
- 5/24學習程序
- HTML5開發學習教程,學習HTML5還是學習HTML5的製作工具?HTML
- 強化學習-學習筆記5 | AlphaGo強化學習筆記Go
- 初學練習,用Perl寫的命令列五子棋命令列
- 學習HTML5還是學習HTML5的製作工具?HTML
- HTML5 Geolocation學習HTML
- Vue學習筆記5Vue筆記
- 學習H5&CSSH5CSS
- git學習筆記5Git筆記
- h5新人學習H5
- PLSQL學習-【5遊標】SQL
- 深入學習golang(5)—介面Golang
- CCNA學習筆記5筆記