Perl教程 - 正則表達式

2021-02-15 集成電路設計及EDA教程


Perl教程 - 標量

Perl教程 - 數組

Perl教程 - 哈希

Perl教程 - 文件操作

Perl在IC設計中有廣泛的應用,而Perl的正則表達式則由其常見,它與Tcl等語言中的正則表達式有一定的相似之處,因此如果學習過相關正則表達式的話這個不會很難。

https://wenku.baidu.com/view/baa401f5dd88d0d233d46ab5.html正則表達式的三種形式:    首先我們應該知道Perl程序中,正則表達式有三種存在形式,他們分別是:

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

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

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

        這三種形式一般都和=~或!~搭配使用,並在左側有待處理的標量變量,如果沒有該變量和=~ !~操作符,則默認為處理$_變量中的內容.        (其中"=~"表示相匹配,在整條語句中讀作does,"!~"表示不匹配,在整條語句中讀作doesn't)        $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=~s/(love)/<$1>/; #此時$1="love",並且該替換的結果是將$string變為"I<love>perl" $string=~s/(i)(.*)(perl)/<$3>$2<$1>/;#這裡$1="i",$2="love",$3="perl",並且替換後$string變為"<perl>love<i>"匹配操作符 m// 用於匹配一個字符串語句或者一個正則表達式,例如,要匹配標量 $bar 中的"run",代碼如下所示:$bar = "I am runoob site. welcome to runoob site.";perl處理完後會給匹配到的值存在三個特殊變量名:$string = "welcome to runoob site.";替換操作符 s/// 是匹配操作符的擴展,使用新的字符串替換指定的字符串。基本格式如下:PATTERN 為匹配模式,REPLACEMENT為替換的字符串。例如我們將以下字符串的"google" 替換為"runoob":$string = "welcome to google site.";$string =~ s/google/runoob/;如果在修飾符中加上"i",則正則將會取消大小寫敏感性,即"a"和"A" 是一樣的。默認的正則開始"^"和結束"$"只是對於正則字符串如果在修飾符中加上"m",那麼開始和結束將會指字符串的每一行:每一行的開頭就是"^",結尾就是"$"。如果在修飾符中加入"s",那麼默認的"."代表除了換行符以外的任何字符將會變成任意字符,也就是包括換行符!如果加上該修飾符,表達式中的空白字符將會被忽略,除非它已經被轉義。       s/<pattern>/<replacement>/g 表示把待處理字符串中所有符合<pattern>的模式全部替換為<replacement>字符串.       s/<pattern>/<replacement>/e表示將把<replacemnet>部分當作一個運算符,這個參數用的不多.         $string=~s/:/*/;#此時$string="i*love:perl";         $string=~s/:/*/g;#此時$string="i*love*perl";         $string=~tr/*//;#此時$string="iloveperl";        $string=~s/(\d+)/$1*2/e;#(/d+)代表$string中的一個或多個數字字符,將這些數字字符執行*2的操作,因此最後$string變成了"www44cgi88".這是另一種替換方式,語法如:tr/string1/string2/。同樣,string2為替換部分,但其效果是把string1中的第一個字符替換為string2中的第一個字符,把string1中的第二個字符替換為string2中的第二個字符,依此類推。如:$string = "abcdefghicba";$string =~ tr/abc/def/; # now string = "defdefghifed"當string1比string2長時,其多餘字符替換為string2的最後一個字符;當string1中同一個字符出現多次時,將使用第一個替換字符。以下實例將變量 $string中的所有小寫字母轉化為大寫字母:$string = 'welcome to runoob site.';以下實例使用 /s 將變量 $string 重複的字符刪除:$string =~ tr/\d/ /c;     # 把所有非數字字符替換為空格$string =~ tr/\t //d;     # 刪除tab和空格$string =~ tr/0-9/ /cs    # 把數字間的其它字符替換為一個空格。正則表達式中的常用模式.    /pattern/                    結果    .                               匹配除換行符以外的所有字符    x?                             匹配0次或一次x字符串    x*                             匹配0次或多次x字符串,但匹配可能的最少次數    x+                             匹配1次或多次x字符串,但匹配可能的最少次數    .*                              匹配0次或多次的任何字符    .+                             匹配1次或多次的任何字符    x{m}            匹配剛好是m個x的指定字符串    x{m,n}                     匹配大於等於m個,小於等於n個x的指定字符串    x{m,}                       匹配大於等於m個x的指定字符串    []                              匹配符合[]內的字符    [^]                            匹配不符合[]內的字符    [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個及2個以上g,再跟著i的字符串    /cg{2}i/                     找到c後面跟著2個g,再跟著i的字符串    /cg*i/            找到c後面跟著0個或多個g,再跟著i的字符串,如同/cg{0,}i/    /cg+i/            找到c後面跟著1個或多個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.正則表達式的八大原則:    ·原則1:正則表達式有三種不同形式(匹配(m//),替換(s///eg)和轉換(tr///)).  ·原則2:正則表達式僅對標量進行匹配($scalar=~m/a/;可以工作;@array=~m/a/將把@array作為標量對待,因此可能不會成功).    ·原則3:正則表達式匹配一個給定模式的最早的可能匹配.預設時,僅匹配或替換正則表達式一次($a='stringstring2';$a=~s/string//;導致$a='string2').   ·原則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用(?..)語法給正則表達式提供擴展功能.謝謝您的關注

相關焦點

  • 正則表達式
    在我看來,正則表達式的主要用途有兩種:①查找特定的信息②查找並編輯特定的信息,也就是我們經常用的替換。。比如我們要在Word,記事本等裡面使用快捷鍵Ctrl+F,進行查找一個特定的字符,或者替換一個字符,這就使用了正則表達式。         正則表達式的功能非常強大,尤其是在文本數據進行處理中顯得更加突出。
  • 乾貨收藏 R語言之正則表達式
    正則表達式表通常被用來檢索、替換那些符合某個模式(規則)的文本。在我看來,正則表達式的主要用途有兩種:①查找特定的信息②查找並編輯特定的信息,也就是我們經常用的替換。。比如我們要在Word,記事本等裡面使用快捷鍵Ctrl+F,進行查找一個特定的字符,或者替換一個字符,這就使用了正則表達式。
  • Java 正則表達式教程及示例
    本教程旨在幫助你駕馭Java正則表達式,同時也幫助我複習正則表達式。什麼是正則表達式?正則表達式定義了字符串的模式。正則表達式可以用來搜索、編輯或處理文本。正則表達式並不僅限於某一種語言,但是在每種語言中有細微的差別。Java正則表達式和Perl的是最為相似的。
  • 正則表達式入門教程 + 免費在線正則測試工具推薦
    正則表達式在計算機領域幾乎無所不在,但它又很難掌握,新手容易犯暈。如果你還處於入門學習階段,單靠腦子憑空寫一些複雜的正則,很難保證準確性,後面往往要花費大量時間去調試。其實,藉助一些可視化的正則測試工具網站,不僅能節省大量時間,還能對正則有更深的理解……什麼是正則表達式?
  • 教程精選:正則表達式快速入門<二>
    在上篇文章裡,我們介紹了正則表達式的模式修正符與元字符,細心的讀者也許會發現,這部分介紹的非常簡略,而且很少有實際的例子的講解。這主要是因為網上現有的正則表達式資料都對這部分都有詳細的介紹和眾多的例子,如果覺得對前一部分缺乏了解可以參看這些資料。本文希望可以儘可能多涉及一些較高級的正則表達式特性。
  • 正則表達式入門教程(下)
    正則表達式裡的分枝條件指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用 | 把不同的規則分隔開。聽不明白?#comment)這種類型的分組不對正則表達式的處理產生任何影響,用於提供注釋讓人閱讀我們已經討論了前兩種語法。第三個(?:exp)不會改變正則表達式的處理方式,只是這樣的組匹配的內容不會像前兩種那樣被捕獲到某個組裡面,也不會擁有組號。「我為什麼會想要這樣做?」——好問題,你覺得為什麼呢?地球人,是不是覺得這些術語名稱太複雜,太難記了?我也有同感。
  • JMeter系列教程二之正則表達式
    前面介紹了JMeter入門使用,本文我們來講講JMeter的正則表達式在使用Jmeter過程中,會經常使用到正則表達式提取器提取器
  • 刨根究底正則表達式(1):開篇
    正則表達式目前市面上並不缺乏專業著作,比如那本被譽為正則表達式學習聖經的《精通正則表達式》就很值得一讀,另外該書的譯者餘晟先生所寫的《正則指引》也不錯。如果僅用於入門,則《正則表達式必知必會》肯定不能錯過,還有網上流傳極廣的《正則表達式30分鐘入門教程》也是不錯的入門資料。但是,結合我自身痛苦的正則表達式學習經歷和運用體會,僅有這些是遠遠不夠的。
  • 實戰JS正則表達式
    [新建正則表達式]:var  regexp = /aabb/g; //g可省 var  regexp = new Regexp("xyz","g"); //第二個參數可省區別在於:1.採用字面量的寫法新建的正則表達式對象在代碼編譯時就會生成,是平常開發中常用的方式;2.採用構造函數生成的正則對象要在代碼運行時生成。
  • 【教程】圖文解讀正則表達式的使用技巧
    一個好的正則表達式看起來像魔法,但請記住:任何足夠先進的技術都無法與魔法區分開來。所以,就讓我們揭開正則表達式的神秘面紗!如果你理解正則表達式,它會突然變成一個超快速和強大的工具……但你首先需要理解它,老實說,我覺得新手可能會對它望而生畏!讓我們從基礎開始。正則表達式(regex)是什麼?
  • 正則表達式真的很騷,可惜你不會寫!!!
    他們都提供相應的接口/函數支持正則表達式。但很神奇的是:無論你大學選擇哪一門計算機語言,都沒有關於正則表達式的課程給你修,在你學會正則之前,你只能看著那些正則大師們,寫了一串外星文似的字符串,替代了你用一大篇幅的if else代碼來做一些數據校驗。
  • 正則表達式在VBA中間是如何應用?正則表達式的實現方式?
    Hi,大家好,本章節開始將會從零開始和大家用圖文的方式,讓你從零基礎學會正則表達式!有興趣的小夥伴可以持續關注我,或者在專欄中進行查看自我學習,願與君攜手前行!在上一個章節說到正則表達式的入門級知識點,本節將會與大家分享一下正則表達式的是具體實現方式是怎麼樣的?
  • 教你學習:Python-100-Days-12 正則表達式
    教你學習: Python-100-Days-12 正則表達式本項目是參考項目內容,進行個人理解,和原有項目有出入,如想了解詳情,請自行百度去搜索項目在編寫處理字符串的程序或網頁時,經常會有查找符合某些複雜規則的字符串的需要
  • python正則表達式
    2''' 3正則表達式, 簡稱為 regex, 是文本模式的描述方法。 4''' 5#7.2.1創建正則表達式對象 6''' 7python中所有正則表達式的函數都在re模塊中,向 re.compile()傳入一個字符串值, 8表示正則表達式,它將返回一個 Regex 模式對象(或者就簡稱為 Regex 對象)。
  • Python之re模塊方法詳解(正則表達式)
    學習re模塊首先要對python正則表達式要了解,正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配
  • Matlab 正則表達式
    正則表達式是一個非常重要的編程概念,主流的程式語言都對正則表達式進行了很好的支持,Matlab也不例外。本期推文就讓我們來總結一下Matlab提供的正則表達式吧!5 動態正則表達式動態表達式允許我們執行 MATLAB 命令或正則表達式以確定要匹配的文本。將動態表達式括起來的括號不創建捕獲組。
  • Python中的正則表達式
    什麼是正則表達式正則表達式是用於處理字符串的強大工具,它使用預定義的特定模式去匹配一類具有共同特徵的字符串,主要用於快速、準確地完成複雜字符串的查找、替換等。正則表達式進行匹配的流程如下圖所示:正則表達式匹配過程是:依次拿出表達式和文本中的字符比較,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
  • VBS正則表達式
    正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。這裡有一些可能會遇到的正則表達式示例:Visual Basic VBscript. 匹配scripting Edition/^\[ \t]*$/ "^\[ \t]*$" 匹配一個空白行。
  • Python 正則表達式
    最簡單的正則表達式就是普通字符串,可以匹配其自身。比如,正則表達式 『hello』 可以匹配字符串 『hello』。要注意的是,正則表達式並不是一個程序,而是用於處理字符串的一種模式,如果你想用它來處理字符串,就必須使用支持正則表達式的工具,比如 Linux 中的 awk, sed, grep,或者程式語言 Perl, Python, Java 等等。
  • Python正則表達式總結
    正則表達式 的起源、發展、流派、語法、引擎、優化等相關知識,今天我們主要來學習一下 正則表達式在 Python語言 中的應用!大多數程式語言的正則表達式設計都師從Perl,所以語法基本相似,不同的是每種語言都有自己的函數去支持正則,今天我們就來學習 Python中關於 正則表達式的函數。re模塊主要定義了9個常量、12個函數、1個異常,每個常量和函數豬哥都會通過實際代碼案例講解,讓大家能更直觀的了解其作用!註:為避免出現代碼格式錯亂,豬哥儘量使用代碼截圖演示哦。