

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Perl 語言,,1,第九章 用正則表達式處理文本,,用s///替換,1,,相關(guān)函數(shù),2,,列表上下文中的m//,3,2,※,△,,更強大的正則表達式,4,9.1 用s///進行替換,m// 等同于“查詢(search)”功能,s ///類似于“查詢并替換”,3,$_ =“He’s out bowling with Barney tonight.”;s/Barney/Fred/; #Ba
2、rney 被Fred 替換掉print “$_\n”;s/with (\w+)/agaist $1’s team/;print “$_\n”; #為“He’s out bowling against Fred’s team tonight”,9.1 用s///進行替換,4,$_ =“green scaly dinosaur”;s/(\w+) (\w+)/$2, $1/; #現(xiàn)在為“scaly
3、, green dinosaur”;s/^/huge, /; #現(xiàn)在為“huge, scaly, green dinosaur”s/,.*een//; #空替換,現(xiàn)在為“huge dinosaur”s/green/red/; #匹配失敗,仍然為“huge dinosaur”s/\w+$/($`!)$&
4、/; #現(xiàn)在為“huge (huge !)dinosaur”s//\s+(!\W+)/$1 /; #現(xiàn)在為“huge (huge!) dinosaur”s/huge/gigantic/; #現(xiàn)在為“gigantic (huge!) dinosaur”if (s/huge/gigantic/){ print “It matched!\n”}
5、 #s///返回布爾值,用/g進行全局替換,s///值進行一次替換,無論是否還有地方還能匹配上。修飾/g 要求s///將所有匹配上的部分都進行替換:,5,$_ = “home, sweet home!”;s/home/cave/g;print “$_\n”; # “cave, sweet cave!”,應(yīng)用:s///g縮減字符串中的空白。
6、,$_ =“Input data\t may have extra whitespace.”;s/\s+/ /g; #現(xiàn)在是“Input data may have extra whitespace.”s/^\s+//; #將開頭的空白去掉s/\s+$//; #將結(jié)尾的空白去掉s/^\s+|\s+$//g; #將開頭,結(jié)
7、尾的空白去掉,不同的定界符,m//和qw//,可以改變使用其他定界符s///的分隔符也可以。但使用3個分隔符,有些不同。,6,s#^https://#http://#;s{fred}{barney};s[fred](barney);s#barney#;,可用替換修飾符,除了/g 修飾符外,替換操作中還可使用/i, /x, 和/s,修飾前部分的模式這些在普通的模式匹配中已經(jīng)出現(xiàn)過的修飾符。無順序。,7,s#wilma#Wilma
8、#gi; #所有WilmA(不分大小寫),替換Wilmas{_ _END_ _.*}{ }s; #將__END__ 標記及其后面內(nèi)容去掉,無損替換,如果需要同時保留原始字符串和替換后的字符串,傳統(tǒng)的辦法是先復(fù)制一份,再替換默認狀態(tài)下,s///返回的成功替換的次數(shù),8,my $original = ‘Fred ate 1 rib’;my $copy = $original;$copy =~ s/\d+ ribs?/
9、10 ribs/;(my $copy = $original) =~ s/\d+ ribs?/10 ribs/; #先賦值,后替換my $copy = $original =~ s/\d+ ribs?/10 ribs/r; #先替換,后賦值,大小寫轉(zhuǎn)換,修飾符\U 要求接下來的字符均是大寫:修飾符\L 要求接下來的字符均是小寫:,9,$_ =“I saw Barney with Fred.”;s/(fred|barn
10、ey)/\U$1/gi; #$_現(xiàn)在是“I saw BARNEY with FRED.”s/(fred)|barney/\L$1/gi; #$_現(xiàn)在是“I saw barney with fred.”,s/(\w+) with (\w+)/\U$2\E with $1/I; #$_ 現(xiàn)在是“I saw FRED with barney.”,大小寫轉(zhuǎn)換,修飾符\u 要求接下來的一個字符大寫:修飾符\l 要求接下來的
11、一個字符小寫:,10,s/ (fred|barney)/\u$1/ig; #$_現(xiàn)在是“I saw FRED with Barney.”s/(fred|barney)/\u\L$1/ig; #$_現(xiàn)在為“I saw Fred with Barney.”,print “Hello, \L\u$name\E, would you like to play a game?\n” #也可以在雙引號中使用此修飾符,9.2 相關(guān)函數(shù)
12、,split操作符:根據(jù)模式拆分字符串my @fields = split /separator/, $string;根據(jù)模式掃描字符串,按照模式匹配分隔字符串,如果匹配成功,該處就是當(dāng)前字段的結(jié)尾,下一個字段的開頭。任何匹配的內(nèi)容都不會出現(xiàn)在返回值中。,11,@fields = split /:/, “abc:def:g:h”; #返回(“abc”, “def”, “g”, “h”)@fields = split /:/
13、, “abc:def::g:h”; #得到(“abc”, “def”, “”, “g”, “h”),9.2 相關(guān)函數(shù),如果有兩個分隔符是連在一起的,則可能得到空的元素開頭的空元素會被返回,但結(jié)尾的空元素被丟棄,12,@fields = split /:/, “:::a:b:c:::”; #得到(“”, “”, “”, “a”, “b”, “c”);my $some_input = “This is a \t
14、 test.\n”;my @args = split /\s+/, $some_input; #(“This”, “is”, “a”, “test.”),9.2 相關(guān)函數(shù),默認時,split 對$_操作,模式為空白:,13,my @fields = split; #同split /\s+/, $_;my @fields = split
15、‘’, ‘a(chǎn)bcdef’; #將字符串分解為單個字符;,9.2 相關(guān)函數(shù),join函數(shù)不使用模式,與split 相反的操作:將這些分割的部分組合成一個整體。 join 函數(shù)的第一個參數(shù)是‘膠水’,它可以是任意字符串。剩下的參數(shù)是要被粘合的部分。join 將粘合元素添加在這些部分之間,并返回其結(jié)果:,14,my $x = join “:”, 4, 6, 8, 10, 12;
16、 #$x 為“4:6:8:10:12”,9.2 相關(guān)函數(shù),被粘合的參數(shù)至少要有兩個元素,否則膠水無法添加,15,my $y = join “foo”, “bar”; #得到“bar”my @empty; #空數(shù)組my $empty = join “baz”, @empty; #沒
17、有元素,因此為空串my $x = join “:”, 4, 6, 8, 10, 12;my @values = split /:/, $x; #@values 為(4, 6, 8, 10, 12)my $z =join “-”, @values; #$z 為“4-6-8-10-12”,9.3 列表上下文中的m//,列表上下文中,模式返回的捕
18、獲組得到的列表,16,$_ =“Hello there, neighbor!”;my($first, $second, $third) =/(\S+) (\S+), (\S+)/;print “$second is my $third\n”;,9.3 列表上下文中的m//,/g修飾符,可以使用到s///, 也可以修飾m//,意為匹配到字符串中的對個地方。,17,my $data = “Barney Rubble Fred Flin
19、tstoneWilma Flintstone”;my %last_name = ($data =~ / (\w+)\S+(\w+)/g);,9.4更強大的正則表達式,量詞:*, + ,? {3,5}---貪婪量詞Perl默認在保證整體匹配的前提下,會盡量匹配長字符串,18,fred and barney went bowling last night用/fred.+barney/進行匹配-----大量的回溯動作,直到匹配成功,非
20、貪婪量詞----*?, +? ,?? {3,5}?Perl默認會盡量匹配短字符串,fred and barney went bowling last night用/fred.+barney/進行匹配-----大量的回溯動作,直到匹配成功,9.4更強大的正則表達式,正則表達式的速度依賴于具體的數(shù)據(jù)。貪婪量詞與非貪婪量詞的差別,19,I’am talking about the cartoon with Fred and Wilma!
21、s#(.*)#$1#g;I thought you said Fred and Velma, not Wilma$#(.*?)#$1#g;,跨行的模式匹配-替換,在多行字符串中,也可以分別針對每一行進行替換。/m,20,$filename = "ex9.txt";if (!open FILE, $filename){ die "Can't open '$filename
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 正則表達式
- shell正則表達式
- js正則表達式總結(jié)
- java使用正則表達式
- 正則表達式的規(guī)則
- 正則表達式分析器
- 正則表達式匹配算法研究.pdf
- 經(jīng)典正則表達式qregexp的解析
- 支持正則表達式的文本匹配優(yōu)化算法.pdf
- 揭開正則表達式語法的神秘面紗
- [學(xué)習(xí)]網(wǎng)站開發(fā)教程-正則表達式
- sqlserverclr用戶定義函數(shù)實現(xiàn)正則表達式
- php字符串操作與正則表達式
- 基于DPI系統(tǒng)的改進正則表達式算法.pdf
- 時空高效的正則表達式匹配算法研究.pdf
- 基于正則表達式的深度包檢測研究.pdf
- 基于正則表達式的圖模式匹配算法研究.pdf
- 基于自動機的正則表達式匹配算法.pdf
- 基于正則表達式的多模式匹配算法研究.pdf
- 基于FPGA的正則表達式的設(shè)計與實現(xiàn).pdf
評論
0/150
提交評論