| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> perl >> Perl中的正則表達式
 

Perl中的正則表達式

2008-05-21 09:45:29  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  1 正則表達式的三種形式

  首先我們應該知道 Perl 程序中,正則表達式有三種存在形式,他們分別是:

  匹配:m/<regexp>/ (還可以簡寫爲 /<regexp>/ ,略去 m)

  替換:s/<pattern>/<replacement>/

  轉化:tr/<pattern>/<replacemnt>/

  這三種形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整條語句中讀作 does,"!~" 表示不匹配,在整條語句中讀作 doesn't),並在左側有待處理的標量變量。如果沒有該變量和 =~ !~ 操作符,則默認爲處理 $_ 變量中的內容。舉例如下:

  $str = "I love Perl";

  $str =~ m/Perl/; # 表示如果在 $str 中發現 "Perl" 字符串,則返回 "1" 否則返回 "0"。

  $str =~ s/Perl/BASH/; # 表示將變量 $str 中的 "Perl" 字符串替換爲 "BASH",如果發生此替換則返回 "1",否則返回 "0"。

  $str !~ tr/A-Z/a-z/; # 表示將變量 $str 中的所有大寫字母轉化爲小寫字母,如果轉化發生了則返回 "0",否則返回 "1"。

  另外還有:

  foreach (@array) { s/a/b/; } # 此處每次循環將從 @array 數組中取出一個元素存放在 $_ 變量中,並對 $_ 進行替換處理。

  while (<FILE>) { print if (m/error/); } # 這一句稍微複雜一些,他將打印 FILE 文件中所有包含 error 字符串的行。

  Perl 的正則表達式中如果出現 () ,則發生匹配或替換後 () 內的模式被 Perl 解釋器自動依次賦給系統 $1, $2 ...... 請看下面的例子:

  $string = "I love perl";

  $string =~ s/(love)/<$1>/; # 此時 $1 = "love",並且該替換的結果是將 $string 變爲 "I <love> perl"

  $string = "i love perl";

  $string =~ s/(i)(.*)(perl)/<$3>$2<$1>/; # 這裏 $1 = "i",$2 = " love ",$3 = "perl",並且替換後 $string 變爲 "<perl> love <i>"

  替換操作 s/<pattern>/<replacement>/ 還可以在末尾加上 e 或 g 參數,他們的含義分別爲:

  s/<pattern>/<replacement>/g 表示把待處理字符串中所有符合 <pattern> 的模式全部替換爲 <replacement> 字符串,而不是只替換第一個出現的模式。

  s/<pattern>/<replacement>/e 表示將把 <replacemnet> 部分當作一個運算符,這個參數用的不多。

  比如下面的例子:

  $string = "i:love:perl";

  $string =~ s/:/*/; #此時 $string="i*love:perl";

  $string = "i:love:perl";

  $string =~ s/:/*/g; #此時 $string="i*love*perl";

  $string =~ tr/*/ /; #此時 $string="i love perl";

  $string = "www22cgi44";

  $string =~ s/(\d+)/$1*2/e; # (/d+)代表 $string 中的一個或多個數字字符,將這些數字字符執行 *2 的操作,因此最後 $string 變成了 "www44cgi88"。

  下面給出一個完整的例子:

  #!/usr/bin/perl

  print"請輸入一個字符串!\n";

  $string = <STDIN>; # <STIDN>代表標准輸入,會讓使用者輸入一字符串

  chop($string); # 將$string最後一個換行的字符\n刪除掉

  if($string =~ /perl/){

  print("輸入的字符串中有 perl 這個字符串!\n";

  }

  如果輸入的字符串含有 perl 這個字符串的話,就會顯示後面的提示信息。

  2 正則表達式中的常用模式

  下面是正則表達式中的一些常用模式。

  

  

  /pattern/

  結果

  

  .

  匹配除換行符以外的所有字符

  

  x?

  匹配 0 次或一次 x 字符串

  

  x*

  匹配 0 次或多次 x 字符串,但匹配可能的最少次數

  

  x+

  匹配 1 次或多次 x 字符串,但匹配可能的最少次數

  

  .*

  匹配 0 次或一次的任何字符

  

  .+

  匹配 1 次或多次的任何字符

  

  {m}

  匹配剛好是 m 個 的指定字符串

  

  {m,n}

  匹配在 m個 以上 n個 以下 的指定字符串

  

  {m,}

  匹配 m個 以上 的指定字符串

  

  []

  匹配符合 [] 內的字符

  

  [^]

  匹配不符合 [] 內的字符

  

  [0-9]

  匹配所有數字字符

  

  [a-z]

  匹配所有小寫字母字符

  

  [^0-9]

  匹配所有非數字字符

  

  [^a-z]

  匹配所有非小寫字母字符

  

  ^

  匹配字符開頭的字符

  

  $

  匹配字符結尾的字符

  

  \d

  匹配一個數字的字符,和 [0-9] 語法一樣

  

  \d+

  匹配多個數字字符串,和 [0-9]+ 語法一樣

  

  \D

  非數字,其他同 \d

  

  \D+

  非數字,其他同 \d+

  

  \w

  英文字母或數字的字符串,和 [a-zA-Z0-9] 語法一樣

  

  \w+

  和 [a-zA-Z0-9]+ 語法一樣

  

  \W

  非英文字母或數字的字符串,和 [^a-zA-Z0-9] 語法一樣

  

  \W+

  和 [^a-zA-Z0-9]+ 語法一樣

  

  \s

  空格,和 [\n\t\r\f] 語法一樣

  

  \s+

  和 [\n\t\r\f]+ 一樣

  

  \S

  非空格,和 [^\n\t\r\f] 語法一樣

  

  \S+

  和 [^\n\t\r\f]+ 語法一樣

  

  \b

  匹配以英文字母,數字爲邊界的字符串

  

  \B

  匹配不以英文字母,數值爲邊界的字符串

  

  a|b|c

  匹配符合a字符 或是b字符 或是c字符 的字符串

  

  abc

  匹配含有 abc 的字符串

  

  (pattern)

  () 這個符號會記住所找尋到的字符串,是一個很實用的語法。第一個 () 內所找到的字符串變成 $1 這個變量或是 \1 變量,第二個 () 內所找到的字符串變成 $2 這個變量或是 \2 變量,以此類推下去。

  

  /pattern/i

  i 這個參數表示忽略英文大小寫,也就是在匹配字符串的時候,不考慮英文的大小寫問題。

  

  如果要在 pattern 模式中找尋一個特殊字符,如 "*",則要在這個字符前加上 \ 符號,這樣才會讓特殊字符失效

  

  

  

  下面給出一些例子:

  

  範例

  說明

  

  /perl/

  找到含有 perl 的字符串

  

  /^perl/

  找到開頭是 perl 的字符串

  

  /perl$/

  找到結尾是 perl 的字符串

  

  /c|g|i/

  找到含有 c 或 g 或 i 的字符串

  

  /cg{2,4}i/

  找到 c 後面跟著 2個到 4個 g ,再跟著 i 的字符串

  

  /cg{2,}i/

  找到 c 後面跟著 2個以上 g ,再跟著 i 的字符串

  

  /cg{2}i/

  找到 c 後面跟著 2個 g,再跟著 i 的字符串

  

  /cg*i/

  找到 c 後面跟著 0個或多個 g ,再跟著 i 的字符串,如同/cg{0,1}i/

  

  /cg+i/

  找到 c 後面跟著一個以上 g,再跟著 i 的字符串,如同/cg{1,}i/

  

  /cg?i/

  找到 c 後面跟著 0個或是 1個 g ,再跟著 i 的字符串,如同/cg{0,1}i/

  

  /c.i/

  找到 c 後面跟著一個任意字符,再跟著 i 的字符串

  

  /c..i/

  找到 c 後面跟著二個任意字符,再跟著 i 的字符串

  

  /[cgi]/

  找到符合有這三個字符任意一個的字符串

  

  /[^cgi]/

  找到沒有這三個字符中任意一個的字符串

  

  /\d/

  找尋符合數字的字符,可以使用/\d+/來表示一個或是多個數字組成的字符串

  

  /\D/

  找尋符合不是數字的字符,可以使用/\D+/來表示一個或是更多個非數字組成的字符串

  

  /\*/

  找尋符合 * 這個字符,因爲 * 在常規表達式中有它的特殊意思,所以要在這個特殊符號前加上 \ 符號,這樣才會讓這個特殊字符失效

  

  /abc/i

  找尋符合 abc 的字符串而且不考慮這些字符串的大小寫

  

  3 正則表達式的八大原則

  如果在 Unix 中曾經使用過 sed、awk、grep 這些命令的話,相信對于 Perl 語言中的正則表達式(Regular Expression)不會感到陌生。Perl 語言由于有這個功能,所以對字符串的處理能力非常強。在Perl語言的程序中,經常可以看到正則表達式的運用,在 CGI 程序設計中也不例外。

  正則表達式是初學 Perl 的難點所在,不過只要一旦掌握其語法,你就可以擁有幾乎無限的模式匹配能力,而且 Perl 編程的大部分工作都是掌握常規表達式。下面給大家介紹幾條正則表達式使用過程中的 8 大原則。

  正則表達式在對付數據的戰鬥中可形成龐大的聯盟——這常常是一場戰爭。我們要記住下面八條原則:

  · 原則1:正則表達式有三種不同形式(匹配(m/ /),替換(s/ / /eg)和轉換(tr/ / /))。

  · 原則2:正則表達式僅對標量進行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 將把@array作爲標量對待,因此可能不會成功)。

  · 原則3:正則表達式匹配一個給定模式的最早的可能匹配。缺省時,僅匹配或替換正則表達式一次( $a = 'string string2'; $a =~ s/string/ /; 導致 $a = 'string 2')。

  · 原則4:正則表達式能夠處理雙引號所能處理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb擴展爲變量;如果 $varb = 'a' $a = 'as',$a =~ s/$varb/ /; 等價于 $a =~ s/a/ /; ,執行結果使 $a = " s" )。

  · 原則5:正則表達式在求值過程中産生兩種情況:結果狀態和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出現,$a =~ s/(word1)(word2)/$2$1/ 則“調換”這兩個單詞。

  · 原則6:正則表達式的核心能力在于通配符和多重匹配運算符以及它們如何操作。$a =~ m/\w+/ 匹配一個或多個單詞字符;$a =~ m/\d/" 匹配零個或多個數字。

  · 原則7:如果欲匹配不止一個字符集合,Perl使用 "|" 來增加靈活性。如果輸入 m/(cat|dog)/ 則相當于“匹配字符串 cat 或者 dog。

  · 原則8:Perl用 (?..) 語法給正則表達式提供擴展功能。(這一點請同學們課後看相關資料)

  想要學習所有這些原則?我建議大家先從簡單的開始,並且不斷的嘗試和實驗。實際上如果學會了 $a =~ m/ERROR/ 是在 $a 中查找子串ERROR,那麽你就已經比在 C 這樣的低層語言中得到了更大的處理能力。
 
 
 
上一篇《Perl五年來第一次發布新版本》
下一篇《用Superlib輕松管理AutoCAD圖庫》
 
 
 
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

河南夫妻在溫嶺網絡直播“造人”內容涉黃被刑事拘留

夫妻網絡直播“造人”爆紅   1月9日,溫嶺城北派出所接到南京警方的協查通告,他們近期打掉了一個涉黃直播APP平台。而根據掌握的線索,其中有一對涉案的夫妻主播...

如何防止牆紙老化?牆紙變舊變黃怎麽辦?

如何防止牆紙老化? (1)選擇透氣性好的牆紙 市場上牆紙的材質分無紡布的、木纖維的、PVC的、玻璃纖維基材的、布面的等,相對而言,PVC材質的牆紙最不透氣...

鮮肌之謎非日本生産VS鮮肌之謎假日貨是謠言

觀點一:破日本銷售量的“鮮肌之謎” 非日本生産 近一段時間,淘寶上架了一款名爲“鮮肌之謎的” 鲑魚卵巢美容液,號稱是最近日本的一款推出的全新護膚品,産品本身所...

中國最美古詩詞精選摘抄

系腰裙(北宋詞人 張先) 惜霜蟾照夜雲天,朦胧影、畫勾闌。人情縱似長情月,算一年年。又能得、幾番圓。 欲寄西江題葉字,流不到、五亭前。東池始有荷新綠,尚小如...

關于女人的經典語句

關于女人的經典語句1、【做一個獨立的女人】 思想獨立:有主見、有自己的人生觀、價值觀。有上進心,永遠不放棄自己的理想,做一份自己喜愛的事業,擁有快樂和成就...

未來我們可以和性愛機器人結婚嗎?

你想體驗機器人性愛嗎?你想和性愛機器人結婚嗎?如果你想,機器人有拒絕你的權利嗎? 近日,第二屆“國際人類-機器人性愛研討會”大會在倫敦金史密斯大學落下帷幕。而...

全球最變態的十個地方

10.土耳其地下洞穴城市 變態指數:★★☆☆☆ 這是土耳其卡帕多西亞的一個著名景點,傳說是當年基督教徒們爲了躲避戰爭而在此修建。裏面曾住著20000人,...

科學家稱,人類死亡後意識將在另外一個宇宙中繼續存活

據英國《每日快報》報道,一位科學家兼理論家Robert Lanza博士宣稱,世界上並不存在人類死亡,死亡的只是身體。他認爲我們的意識借助我們體內的能量生存,而且...

《屏裏狐》片頭曲《我愛狐狸精》歌詞是什麽?

《我愛狐狸精》 - 劉馨棋   (電視劇《屏裏狐》主題曲)   作詞:金十三&李旦   作曲:劉嘉   狐狸精 狐狸仙   千年修...

 
 
 
  1 正則表達式的三種形式   首先我們應該知道 Perl 程序中,正則表達式有三種存在形式,他們分別是:   匹配:m/<regexp>/ (還可以簡寫爲 /<regexp>/ ,略去 m)   替換:s/<pattern>/<replacement>/   轉化:tr/<pattern>/<replacemnt>/   這三種形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整條語句中讀作 does,"!~" 表示不匹配,在整條語句中讀作 doesn't),並在左側有待處理的標量變量。如果沒有該變量和 =~ !~ 操作符,則默認爲處理 $_ 變量中的內容。舉例如下:   $str = "I love Perl";   $str =~ m/Perl/; # 表示如果在 $str 中發現 "Perl" 字符串,則返回 "1" 否則返回 "0"。   $str =~ s/Perl/BASH/; # 表示將變量 $str 中的 "Perl" 字符串替換爲 "BASH",如果發生此替換則返回 "1",否則返回 "0"。   $str !~ tr/A-Z/a-z/; # 表示將變量 $str 中的所有大寫字母轉化爲小寫字母,如果轉化發生了則返回 "0",否則返回 "1"。   另外還有:   foreach (@array) { s/a/b/; } # 此處每次循環將從 @array 數組中取出一個元素存放在 $_ 變量中,並對 $_ 進行替換處理。   while (<FILE>) { print if (m/error/); } # 這一句稍微複雜一些,他將打印 FILE 文件中所有包含 error 字符串的行。   Perl 的正則表達式中如果出現 () ,則發生匹配或替換後 () 內的模式被 Perl 解釋器自動依次賦給系統 $1, $2 ...... 請看下面的例子:   $string = "I love perl";   $string =~ s/(love)/<$1>/; # 此時 $1 = "love",並且該替換的結果是將 $string 變爲 "I <love> perl"   $string = "i love perl";   $string =~ s/(i)(.*)(perl)/<$3>$2<$1>/; # 這裏 $1 = "i",$2 = " love ",$3 = "perl",並且替換後 $string 變爲 "<perl> love <i>"   替換操作 s/<pattern>/<replacement>/ 還可以在末尾加上 e 或 g 參數,他們的含義分別爲:   s/<pattern>/<replacement>/g 表示把待處理字符串中所有符合 <pattern> 的模式全部替換爲 <replacement> 字符串,而不是只替換第一個出現的模式。   s/<pattern>/<replacement>/e 表示將把 <replacemnet> 部分當作一個運算符,這個參數用的不多。   比如下面的例子:   $string = "i:love:perl";   $string =~ s/:/*/; #此時 $string="i*love:perl";   $string = "i:love:perl";   $string =~ s/:/*/g; #此時 $string="i*love*perl";   $string =~ tr/*/ /; #此時 $string="i love perl";   $string = "www22cgi44";   $string =~ s/(\d+)/$1*2/e; # (/d+)代表 $string 中的一個或多個數字字符,將這些數字字符執行 *2 的操作,因此最後 $string 變成了 "www44cgi88"。   下面給出一個完整的例子:   #!/usr/bin/perl   print"請輸入一個字符串!\n";   $string = <STDIN>; # <STIDN>代表標准輸入,會讓使用者輸入一字符串   chop($string); # 將$string最後一個換行的字符\n刪除掉   if($string =~ /perl/){   print("輸入的字符串中有 perl 這個字符串!\n";   }   如果輸入的字符串含有 perl 這個字符串的話,就會顯示後面的提示信息。   2 正則表達式中的常用模式   下面是正則表達式中的一些常用模式。             /pattern/   結果         .   匹配除換行符以外的所有字符         x?   匹配 0 次或一次 x 字符串         x*   匹配 0 次或多次 x 字符串,但匹配可能的最少次數         x+   匹配 1 次或多次 x 字符串,但匹配可能的最少次數         .*   匹配 0 次或一次的任何字符         .+   匹配 1 次或多次的任何字符         {m}   匹配剛好是 m 個 的指定字符串         {m,n}   匹配在 m個 以上 n個 以下 的指定字符串         {m,}   匹配 m個 以上 的指定字符串         []   匹配符合 [] 內的字符         [^]   匹配不符合 [] 內的字符         [0-9]   匹配所有數字字符         [a-z]   匹配所有小寫字母字符         [^0-9]   匹配所有非數字字符         [^a-z]   匹配所有非小寫字母字符         ^   匹配字符開頭的字符         $   匹配字符結尾的字符         \d   匹配一個數字的字符,和 [0-9] 語法一樣         \d+   匹配多個數字字符串,和 [0-9]+ 語法一樣         \D   非數字,其他同 \d         \D+   非數字,其他同 \d+         \w   英文字母或數字的字符串,和 [a-zA-Z0-9] 語法一樣         \w+   和 [a-zA-Z0-9]+ 語法一樣         \W   非英文字母或數字的字符串,和 [^a-zA-Z0-9] 語法一樣         \W+   和 [^a-zA-Z0-9]+ 語法一樣         \s   空格,和 [\n\t\r\f] 語法一樣         \s+   和 [\n\t\r\f]+ 一樣         \S   非空格,和 [^\n\t\r\f] 語法一樣         \S+   和 [^\n\t\r\f]+ 語法一樣         \b   匹配以英文字母,數字爲邊界的字符串         \B   匹配不以英文字母,數值爲邊界的字符串         a|b|c   匹配符合a字符 或是b字符 或是c字符 的字符串         abc   匹配含有 abc 的字符串         (pattern)   () 這個符號會記住所找尋到的字符串,是一個很實用的語法。第一個 () 內所找到的字符串變成 $1 這個變量或是 \1 變量,第二個 () 內所找到的字符串變成 $2 這個變量或是 \2 變量,以此類推下去。          /pattern/i   i 這個參數表示忽略英文大小寫,也就是在匹配字符串的時候,不考慮英文的大小寫問題。            如果要在 pattern 模式中找尋一個特殊字符,如 "*",則要在這個字符前加上 \ 符號,這樣才會讓特殊字符失效                     下面給出一些例子:            範例   說明          /perl/   找到含有 perl 的字符串         /^perl/   找到開頭是 perl 的字符串          /perl$/   找到結尾是 perl 的字符串         /c|g|i/   找到含有 c 或 g 或 i 的字符串         /cg{2,4}i/   找到 c 後面跟著 2個到 4個 g ,再跟著 i 的字符串         /cg{2,}i/   找到 c 後面跟著 2個以上 g ,再跟著 i 的字符串         /cg{2}i/   找到 c 後面跟著 2個 g,再跟著 i 的字符串         /cg*i/   找到 c 後面跟著 0個或多個 g ,再跟著 i 的字符串,如同/cg{0,1}i/         /cg+i/   找到 c 後面跟著一個以上 g,再跟著 i 的字符串,如同/cg{1,}i/         /cg?i/   找到 c 後面跟著 0個或是 1個 g ,再跟著 i 的字符串,如同/cg{0,1}i/         /c.i/   找到 c 後面跟著一個任意字符,再跟著 i 的字符串         /c..i/   找到 c 後面跟著二個任意字符,再跟著 i 的字符串         /[cgi]/   找到符合有這三個字符任意一個的字符串         /[^cgi]/   找到沒有這三個字符中任意一個的字符串         /\d/   找尋符合數字的字符,可以使用/\d+/來表示一個或是多個數字組成的字符串         /\D/   找尋符合不是數字的字符,可以使用/\D+/來表示一個或是更多個非數字組成的字符串         /\*/   找尋符合 * 這個字符,因爲 * 在常規表達式中有它的特殊意思,所以要在這個特殊符號前加上 \ 符號,這樣才會讓這個特殊字符失效         /abc/i   找尋符合 abc 的字符串而且不考慮這些字符串的大小寫            3 正則表達式的八大原則   如果在 Unix 中曾經使用過 sed、awk、grep 這些命令的話,相信對于 Perl 語言中的正則表達式(Regular Expression)不會感到陌生。Perl 語言由于有這個功能,所以對字符串的處理能力非常強。在Perl語言的程序中,經常可以看到正則表達式的運用,在 CGI 程序設計中也不例外。   正則表達式是初學 Perl 的難點所在,不過只要一旦掌握其語法,你就可以擁有幾乎無限的模式匹配能力,而且 Perl 編程的大部分工作都是掌握常規表達式。下面給大家介紹幾條正則表達式使用過程中的 8 大原則。   正則表達式在對付數據的戰鬥中可形成龐大的聯盟——這常常是一場戰爭。我們要記住下面八條原則:      · 原則1:正則表達式有三種不同形式(匹配(m/ /),替換(s/ / /eg)和轉換(tr/ / /))。   · 原則2:正則表達式僅對標量進行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 將把@array作爲標量對待,因此可能不會成功)。   · 原則3:正則表達式匹配一個給定模式的最早的可能匹配。缺省時,僅匹配或替換正則表達式一次( $a = 'string string2'; $a =~ s/string/ /; 導致 $a = 'string 2')。   · 原則4:正則表達式能夠處理雙引號所能處理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb擴展爲變量;如果 $varb = 'a' $a = 'as',$a =~ s/$varb/ /; 等價于 $a =~ s/a/ /; ,執行結果使 $a = " s" )。   · 原則5:正則表達式在求值過程中産生兩種情況:結果狀態和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出現,$a =~ s/(word1)(word2)/$2$1/ 則“調換”這兩個單詞。   · 原則6:正則表達式的核心能力在于通配符和多重匹配運算符以及它們如何操作。$a =~ m/\w+/ 匹配一個或多個單詞字符;$a =~ m/\d/" 匹配零個或多個數字。   · 原則7:如果欲匹配不止一個字符集合,Perl使用 "|" 來增加靈活性。如果輸入 m/(cat|dog)/ 則相當于“匹配字符串 cat 或者 dog。   · 原則8:Perl用 (?..) 語法給正則表達式提供擴展功能。(這一點請同學們課後看相關資料)      想要學習所有這些原則?我建議大家先從簡單的開始,並且不斷的嘗試和實驗。實際上如果學會了 $a =~ m/ERROR/ 是在 $a 中查找子串ERROR,那麽你就已經比在 C 這樣的低層語言中得到了更大的處理能力。
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
小龍女彤彤之情溢皇都
龔潔
智能手機形象美女
崔潔彤
回家的路上----
中國一站(哈爾濱)
清明植物園的花。
桃花堤印象之豎版
 
>>返回首頁<<
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有