国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

vi 中的正則表達式 (Regular Expression)

2019-11-17 05:45:43
字體:
來源:轉載
供稿:網友
.1. 定義和例子
============
  正則表達式只是一個字符模板,用來在搜索中匹配相同的字符.
在大多數的程序中,正則表達式是括在正斜杠中間的.
例如, /love/就是一個以正斜杠為分隔符的正則表達式,其中的
模板love 將用在搜索所有行中與它匹配的字符. 更為有趣的是
正則表達式可以被非凡的元字符控制.讓我們通過下面的例子來進
一步了解這個概念.
  有文本如下:
  Hi tom,
  I think I failed my anatomy test yesterday. I
  had a terrible stomach ache. I ate too many
  fried green tomatoes.
  Anyway, Tom, Ineed your help. I'd like to make
  the test up tomorrow, but don't know where to
  begin studying. Do you think you could help me?
  After work, about 7 PM, come to my place and I'll
  treat you to pizza in return for your help.
  Thanks.
            Your pal,
            guy@phantom

  假設你發覺Tom 并沒有參加考試,而是David 參加的考試.同時還
發現, 在賀信中Tom的T用的是小寫.于是你決定做一個全文替換,把tom
替換為Tom.

在vi命令行模式下輸入:
:1, $s/tom/David/g
 ^   ^  ^    ^   ^
             ---- global 對全文有效
         
        --------- 將tom 替換為 David , 使用正則表達式.
    ------- 替換單詞
 ------ 從文件的第一行到文件的最后一行.

 替換后的文本如下:
 Hi David,
 I think I failed my anaDavidy test yesterday, I
 had terible sDavidach ache. I ate too many
 fried green Davidatoes.
 Anyway, David, I need your help. I'd like to make
 the test up Davidorrow, but don't know where to
 begin studying. Do you think you could help me?
 After work, about ? PM, come to my place and
 I'll treat you to pizza in return for your help.
 Thanks.
                 Your pal,
                 guy@phanDavid
 
 我們發現有些單詞中含有tom的的也被替換了.
 這是因為我們沒有使用正則表達式的元字符來界定一個模板從而控制
 字符的替換動作.
 使用:
 :1, $s//<[Tt]om/>/David/g
 就可以得到我們想要的結果了,即只替換單詞tom而不是含有tom字符的
 單詞. 2. 正則表達式的元字符
==================
  正則表達式的元字符是一些非凡的字符,它們答應你以某種方式界定一個
模板來控制什么樣的替換將發生.有的元字符錨定一個單詞在行首或者行尾.
有的元字符答應你指定一個字符范圍或者一些字符, 來找到大寫字母, 小寫字母
數字或者非數字等.

  有兩套正則表達式字符集, 一套是基本元字符集, 另一套是擴展元字符集.
另外, POSIX (Portable Operating System Interface for Computer Eaviron ment)
標準還提供了一套元字符集.下表提供了可以在所有版本的vi, grep, egrep, sed and gawk
中使用的基本元字符集.
  表:
----------------------------------------------------------------------------------------------
  元字符       功能              例子           匹配什么
  ----------------------------------------------------------------------------------------------
  ^       錨定行的開始          /^love/     匹配所有以love開頭的行.
  ----------------------------------------------------------------------------------------------
  $       錨定行的結束          /love$/     匹配所有以love結束的行.
  ----------------------------------------------------------------------------------------------
  .       匹配一個字符          /l..e/     匹配這樣的行, 這些行包含這樣的字符,
                        第一個字符是 l,緊跟著兩個字符,然后是e.
  -----------------------------------------------------------------------------------------------
  *       代表0個或多個先前字符       /*love/     匹配這樣的行, 有0個或者多個空格,空格
                        候跟著love
  -----------------------------------------------------------------------------------------------
  []       匹配字符組中的一個字符       /[lL]ove/     匹配所有包含love or Love 的行
  -----------------------------------------------------------------------------------------------
  [x-y]       匹配以字符范圍組成的組中的一個字符    /[A-Z]ove     匹配所有這樣的行, 這些行包含如下字符
                        第一個字符是從A到Z 中間的一個, 后面跟
                        著ove
  -----------------------------------------------------------------------------------------------
  [^]       匹配一個不在范圍內的字符       /[^A-Z]ove/     匹配所有這樣的行, 這些行包含如下字符
                        第一個字符不是從A到Z 中間的一個, 后面
                        跟著ove
  -----------------------------------------------------------------------------------------------
  /       用來轉義一個字符          /love/./     匹配所有這樣的行, 這些行包含如下字符
                        love 后面跟著一個點, 通常點是表示任何
                        字符的通配符.
  -----------------------------------------------------------------------------------------------
  /<        錨定單詞的開始          //<love/     匹配所有這樣的行, 這些行包含以love
                        開頭的單詞 (vi & grep 都支持這個功能)
  -----------------------------------------------------------------------------------------------
  />       錨定單詞的結束          /<love/>     ... ^ ... 以love結束的單詞 ... ^
  -----------------------------------------------------------------------------------------------
  /(../)    標記后面用到的匹配字符       //(love/)a/1b 最多可以使用9個標簽. 第一個標簽是模板
                        最左邊的部分. 在這例子中, 模板love
                        保存為標簽1, 后面的/1指的就是love;
                        本例子搜索的是這樣的行, 這些行包含這樣
                        的字符,在lovea 后面跟著loveb.
 ------------------------------------------------------------------------------------------------
 [NOTE: 各種版本的Unix 以及模板匹配 (pattern-matching) 實用程序并不都是可信賴的, 通常我們使用 vi & grep]

假設你熟悉 vi 是怎樣工作的, 每一個元字符都在 vi 搜索字符串的術語中有具體描述.
 下面的例子中, 被加重的字符就是 vi 將找到的匹配字符.
 
 文本如下:
 I had a lovely time on our little picnic.
 Lovers were all around us. It is sPRingtime. Oh
 Love, how mUCh I adore you. Do you know
 the extent of my love? Oh, by the way, I think
 I lost my gloves somewhere out in that field of
 clover. Did you see them? I can only hope love
 is forever. I live for you. It's hard to get back
 in the groove.
 ~
 ~
 ~
 /love/

 結果如下:
 I had a lovely time on our little picnic.
      ^
 Lovers were all around us. It is springtime. Oh
    ^
 Love, how much I adore you. Do you know
   ^
 the extent of my love? Oh, by the way, I think
                    ^
 I lost my gloves somewhere out in that field of
              ^
 clover. Did you see them? I can only hope love
    ^                                        ^
 is forever. I live for you. It's hard to get back
 in the groove.
   
 //
 還有一些測試命令如下:
 /^love/
 /love$/
 /l.ve/
 /[lL]ove/
 /ove[a-z]/
 /ove[^a-zA-Z0-9]/

 //
 //:~ Tue 22 Apr 2003 11:42:51 PM CST
 //:~ End Of PAGE 1


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永修县| 青州市| 新乐市| 漯河市| 禄丰县| 宁晋县| 松阳县| 芒康县| 商河县| 莒南县| 华池县| 全椒县| 永修县| 塘沽区| 阳春市| 马尔康县| 晴隆县| 平远县| 阿图什市| 南汇区| 额济纳旗| 九江市| 墨脱县| 若羌县| 商城县| 洛宁县| 张掖市| 许昌市| 阳谷县| 柳林县| 河西区| 涿州市| 冷水江市| 崇阳县| 蚌埠市| 南漳县| 买车| 保亭| 内丘县| 庄浪县| 仁怀市|