Learning Perl學(xué)習(xí)筆記(6)第七章 正則表達(dá)式

這一章是很重要的苗踪,幾乎整章都是要點母蛛,而且知識點比較零碎萧锉,但是很好理解。

課后練習(xí)

第一題

Make a program that prints each line of its input that mentions fred. (It
shouldn’t do anything for other lines of input.) Does it match if your input string
is Fred, frederick, or Alfred? Make a small text file with a few lines mentioning
“fred flintstone” and his friends, then use that file as input to this program and
the ones later in this section.
這道題是說首先創(chuàng)建一個小文本,里面要包含fred flintstone這個字符串。并且還要包括其他的名字字符串息裸。然后檢查每一行里是否有fred這個字符串可以匹配蝇更。

腳本:

#!/usr/bin/perl
use warnings;
use strict;
use v5.24;

while($_= <>){
        chomp;
        if (m/fred/){ 
                print "This line contains the word \"fred\":\n$_\n";
        }
}

小文本text1.txt:

$ cat text1.txt
His first name is Fred.
His full name if Fred Flintsone.
He is a student whoes major in computer science.
He has a lot of friends in school.One of his friends named Frederick.
The other friend of him is Alfred.

運行腳本:

$ ./practice1.pl text1.txt #運行腳本,查找text1.txt文件里是否有fred字符串呼盆,發(fā)現(xiàn)只有最后一行才有年扩。其他行都是Fred,說明了匹配操作是區(qū)分大小寫的访圃。
This line contains the word "fred":
The other friend of him is Alfred.

第二題

Modify the previous program to allow Fred to match as well. Does it match
now if your input string is Fred, frederick, or Alfred? (Add lines with these
names to the text file.) 本題要求讓fred和Fred都可以和文本匹配上厨幻。

腳本:

#!/usr/bin/perl
use warnings;
use strict;
use v5.24;

while($_= <>){
        chomp;
        if (m/[Ff]red/){
                print "$_\n";
        }
}

運行:

$ ./practice1.pl text1.txt
His first name is Fred.
His full name if Fred Flintsone.
He has a lot of friends in school.One of his friends named Frederick.
The other friend of him is Alfred.

第三題

Make a program that prints each line of its input that contains a period (.),
ignoring other lines of input. Try it on the small text file from the previous exercise:
does it notice Mr. Slate?

根據(jù)題目要求,先把小文本的內(nèi)容進行一下修改腿时,隨便改了一些况脆,使文本里包含Mr.Slate這個字符串:

$ cat text1.txt
His first name is Fred.
Mr.Slate is his father.
His full name if Fred Flintsone.
He is a student whoes major in computer science.
He has a lot of friends in school.
One of his friends named Frederick.
The other friend of him is Alfred.

腳本:

#!/usr/bin/perl
use warnings;
use strict;
use v5.24;

while($_= <>){
        chomp;
        if (m/[.]./){ #方括號里的點代表字符點,后面的那個點代表在字符點后面還要匹配一個任意字符(除了新行)批糟,這就使得小文本里的其他行最后的句號不符合這個要求格了,所以小文本里能匹配的只有一句。
                print "$_\n"; #打印符合要求的那一行
        }
}

運行:

$ ./practice1.pl text1.txt
Mr.Slate is his father.

第四題

Make a program that prints each line that has a word that is capitalized but
not ALL capitalized. Does it match Fred but neither fred nor FRED?本題要求只匹配第一個字母大寫的fred徽鼎,而不能匹配全是小寫或者全是大寫的字符盛末。

修改小文本:

$ cat text1.txt
fred
Fred
FRED
fred flintstone
Fred Flintstone
frederick

腳本:

#!/usr/bin/perl
use warnings;
use strict;
use v5.24;

while($_= <>){
        chomp;
        if (m/[A-Z][a-z]+/){
                print "$_\n";
        }
}

運行:

$ ./practice1.pl text1.txt
Fred
Fred Flintstone

第五題

Make a program that prints each line that has two of the same nonwhitespace
characters next to each other. It should match lines that contain words such as
Mississippi, Bamm-Bamm, or llama.本題要求匹配打印出有連續(xù)2個相同字符(非空白字符)的行

修改小文本:

$ cat text1.txt
fred
Mississippi
Bamm-Bamm
Alfred
frederick
llama

腳本:

#!/usr/bin/perl
use warnings;
use strict;
use v5.24;

while($_= <>){
        chomp;
        if (m/(.)\1/){ #括號里加點,后面再加一個\1代表再次匹配前面的點匹配的字符否淤,換句話說悄但,就是要匹配兩個連續(xù)的字符
                print "$_\n";
        }
}

運行:

$ ./practice1.pl text1.txt
Mississippi
Bamm-Bamm
llama

第六題

Extra credit exercise: write a program that prints out any input line that mentions both wilma and fred.

修改小文本:

$ cat text1.txt
fred
wilma
Alfred
fred and wilma

腳本:

#!/usr/bin/perl
use warnings;
use strict;
use v5.24;

while($_= <>){
        chomp;
        if (m/fred/ && /wilma/){ #注意這里兩個//和&之間是有空格的,兩個&&代表“并且”的意思
                print "$_\n";
        }
}

運行:

$ ./practice1.pl text1.txt
fred and wilma
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叹括,一起剝皮案震驚了整個濱河市算墨,隨后出現(xiàn)的幾起案子宵荒,更是在濱河造成了極大的恐慌汁雷,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件报咳,死亡現(xiàn)場離奇詭異侠讯,居然都是意外死亡,警方通過查閱死者的電腦和手機暑刃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門厢漩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岩臣,你說我怎么就攤上這事溜嗜。” “怎么了架谎?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵炸宵,是天一觀的道長。 經(jīng)常有香客問我谷扣,道長土全,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮裹匙,結(jié)果婚禮上瑞凑,老公的妹妹穿的比我還像新娘。我一直安慰自己概页,他們只是感情好籽御,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惰匙,像睡著了一般篱蝇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徽曲,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天零截,我揣著相機與錄音,去河邊找鬼秃臣。 笑死涧衙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奥此。 我是一名探鬼主播弧哎,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稚虎!你這毒婦竟也來了撤嫩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蠢终,失蹤者是張志新(化名)和其女友劉穎序攘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寻拂,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡程奠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了祭钉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞄沙。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖慌核,靈堂內(nèi)的尸體忽然破棺而出距境,到底是詐尸還是另有隱情,我是刑警寧澤垮卓,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布垫桂,位于F島的核電站,受9級特大地震影響扒接,放射性物質(zhì)發(fā)生泄漏伪货。R本人自食惡果不足惜们衙,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碱呼。 院中可真熱鬧蒙挑,春花似錦、人聲如沸愚臀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姑裂。三九已至馋袜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舶斧,已是汗流浹背欣鳖。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茴厉,地道東北人泽台。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像矾缓,于是被迫代替她去往敵國和親怀酷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345