天天看點

正規表達式之道

目錄[隐藏 ]

一、什麼是正規表達式
二、正規表達式基礎
三、常用的正規表達式
四、Editplus等軟體中正則替換技巧

  正規表達式之道

  原著:Steve Mansour

  [email protected]

  Revised: June 5, 1999

  (copied by jm /at/ jmason.org from , after the original disappeared! )

  翻譯:Neo Lee

  [email protected]

  2004年10月16日

  英文版原文

  譯者按:原文因為年代久遠,文中很多連結早已過期(主要是關于vi、sed等工具的介紹和手 冊),本譯文中已将此類連結删除,如需檢查這些連結可以檢視上面連結的原文。除此之外基本照原文直譯,括号中有“譯者按”的部分是譯者補充的說明。如有内 容方面的問題請直接和Steve Mansor聯系,當然,如果你隻寫中文,也可以和我聯系。

  目 錄

  什麼是正規表達式

  範例

  簡單

  中級(神奇的咒語)

  困難(不可思議的象形文字)

  不同工具中的正規表達式

[ 編輯本段 ] 一、什麼是正規表達式

   一個正規表達式,就是用某種模式去比對一類字元串的一個公式。很多人因為它們看上去比較古怪而且複雜是以不敢去使用——很不幸,這篇文章也不能夠改變這 一點,不過,經過一點點練習之後我就開始覺得這些複雜的表達式其實寫起來還是相當簡單的,而且,一旦你弄懂它們,你就能把數小時辛苦而且易錯的文本處理工 作壓縮在幾分鐘(甚至幾秒鐘)内完成。正規表達式被各種文本編輯軟體、類庫(例如Rogue Wave的tools.h++)、腳本工具(像awk/grep/sed)廣泛的支援,而且像Microsoft的Visual C++這種互動式IDE也開始支援它了。

  我們将在如下的章節中利用一些例子來解釋正規表達式的用法,絕大部分的例子是基于vi中的文本 替換指令和grep檔案搜尋指令來書寫的,不過它們都是比較典型的例子,其中的概念可以在sed、awk、perl和其他支援正規表達式的程式設計語言中使 用。你可以看看不同工具中的正規表達式這一節,其中有一些在别的工具中使用正規表達式的例子。還有一個關于vi中文本替換指令(s)的簡單說明附在文後供 參考。

[ 編輯本段 ] 二、正規表達式基礎

  正規表達式由一些普通字元和一些元字元(metacharacters)組成。普通字元包括大小寫的字母和數字,而元字元則具有特殊的含義,我們下面會給予解釋。

  在最簡單的情況下,一個正規表達式看上去就是一個普通的查找串。例如,正規表達式"testing"中沒有包含任何元字元,,它可以比對"testing"和"123testing"等字元串,但是不能比對"Testing"。

  要想真正的用好正規表達式,正确的了解元字元是最重要的事情。下表列出了所有的元字元和對它們的一個簡短的描述。

  元字元 描述

  .

  比對任何單個字元。例如正規表達式r.t比對這些字元串:rat、rut、r t,但是不比對root。

  $

  比對行結束符。例如正規表達式weasel$ 能夠比對字元串"He's a weasel"的末尾,但是不能比對字元串"They are a bunch of weasels."。

  ^

  比對一行的開始。例如正規表達式^When in能夠比對字元串"When in the course of human events"的開始,但是不能比對"What and When in the"。

  *

  比對0或多個正好在它之前的那個字元。例如正規表達式.*意味着能夠比對任意數量的任何字元。

  /

  這是引用符,用來将這裡列出的這些元字元當作普通的字元來進行比對。例如正規表達式/$被用來比對美元符号,而不是行尾,類似的,正規表達式/.用來比對點字元,而不是任何字元的通配符。

  [ ]

  [c1-c2]

  [^c1-c2]

  比對括号中的任何一個字元。例如正規表達式r[aou]t比對rat、rot和rut,但是不 比對ret。可以在括号中使用連字元-來指定字元的區間,例如正規表達式[0-9]可以比對任何數字字元;還可以制定多個區間,例如正規表達式[A- Za-z]可以比對任何大小寫字母。另一個重要的用法是“排除”,要想比對除了指定區間之外的字元——也就是所謂的補集——在左邊的括号和第一個字元之間 使用^字元,例如正規表達式[^269A-Z] 将比對除了2、6、9和所有大寫字母之外的任何字元。

  /< />

  比對詞(word)的開始(/<)和結束(/>)。例如正規表達式/<the能夠比對字元串"for the wise"中的"the",但是不能比對字元串"otherwise"中的"the"。注意:這個元字元不是所有的軟體都支援的。

  /( /)

  将 /( 和 /) 之間的表達式定義為“組”(group),并且将比對這個表達式的字元儲存到一個臨時區域(一個正規表達式中最多可以儲存9個),它們可以用 到 的符号來引用。

  |

  将兩個比對條件進行邏輯“或”(Or)運算。例如正規表達式(him|her) 比對"it belongs to him"和"it belongs to her",但是不能比對"it belongs to them."。注意:這個元字元不是所有的軟體都支援的。

  +

  比對1或多個正好在它之前的那個字元。例如正規表達式9+比對9、99、999、98、93dsf、9.....等。注意:這個元字元不是所有的軟體都支援的。

  ?

  比對0或1個正好在它之前的那個字元。注意:這個元字元不是所有的軟體都支援的。

  /{i/}

  /{i,j/}

  比對指定數目的字元,這些字元是在它之前的表達式定義的。例如正規表達式A[0-9]/{3 /} 能夠比對字元"A"後面跟着正好3個數字字元的串,例如A123、A348等,但是不比對A1234。而正規表達式[0-9]/{4,6/} 比對連續的任意4個、5個或者6個數字字元。注意:這個元字元不是所有的軟體都支援的。

  最簡單的元字元是點,它能夠比對任何單個字元(注意不包括新行符)。假定有個檔案test.txt包含以下幾行内容:

  he is a rat

  he is in a rut

  the food is Rotten

  I like root beer

  我們可以使用grep指令來測試我們的正規表達式,grep指令使用正規表達式去嘗試比對指定檔案的每一行,并将至少有一處比對表達式的所有行顯示出來。指令

  grep r.t test.txt

  在test.txt檔案中的每一行中搜尋正規表達式r.t,并列印輸出比對的行。正規表達式 r.t比對一個r接着任何一個字元再接着一個t。是以它将比對檔案中的rat和rut,而不能比對Rotten中的Rot,因為正規表達式是大小寫敏感 的。要想同時比對大寫和小寫字母,應該使用字元區間元字元(方括号)。正規表達式[Rr]能夠同時比對R和r。是以,要想比對一個大寫或者小寫的r接着任 何一個字元再接着一個t就要使用這個表達式:[Rr].t。

  要想比對行首的字元要使用抑揚字元(^)——又是也被叫做插入符。例如,想找到text.txt中行首"he"打頭的行,你可能會先用簡單表達式he,但是這會比對第三行的the,是以要使用正規表達式^he,它隻比對在行首出現的h。

  有時候指定“除了×××都比對”會比較容易達到目的,當抑揚字元(^)出現在方括号中是,它表示“排除”,例如要比對he ,但是排除前面是t or s的情性(也就是the和she),可以使用:[^st]he。

  可以使用方括号來指定多個字元區間。例如正規表達式[A-Za-z]比對任何字母,包括大寫和 小寫的;正規表達式[A-Za-z][A-Za-z]* 比對一個字母後面接着0或者多個字母(大寫或者小寫)。當然我們也可以用元字元+做到同樣的事情,也就是:[A-Za-z]+ ,和[A-Za-z][A-Za-z]*完全等價。但是要注意元字元+ 并不是所有支援正規表達式的程式都支援的。關于這一點可以參考後面的正規表達式文法支援情況。

  要指定特定數量的比對,要使用大括号(注意必須使用反斜杠來轉義)。想比對所有100和 1000的執行個體而排除10和10000,可以使用:10/{2,3/},這個正規表達式比對數字1後面跟着2或者3個0的模式。在這個元字元的使用中一個 有用的變化是忽略第二個數字,例如正規表達式0/{3,/} 将比對至少3個連續的0。

  簡單的例子

  這裡有一些有代表性的、比較簡單的例子。

  vi 指令 作用

  :%s/ */ /g 把一個或者多個空格替換為一個空格。

  :%s/ *$// 去掉行尾的所有空格。

  :%s/^/ / 在每一行頭上加入一個空格。

  :%s/^[0-9][0-9]* // 去掉行首的所有數字字元。

  :%s/b[aeio]g/bug/g 将所有的bag、beg、big和bog改為bug。

  :%s/t/([aou]/)g/ht/g 将所有tag、tog和tug分别改為hat、hot和hug(注意用group的用法和使用引用前面被比對的字元)。

  中級的例子(神奇的咒語)

  例1

  将所有方法foo(a,b,c)的執行個體改為foo(b,a,c)。這裡a、b和c可以是任何提供給方法foo()的參數。也就是說我們要實作這樣的轉換:

  之前 之後

  foo(10,7,2) foo(7,10,2)

  foo(x+13,y-2,10) foo(y-2,x+13,10)

  foo( bar(8), x+y+z, 5) foo( x+y+z, bar(8), 5)

  下面這條替換指令能夠實作這一魔法:

  :%s/foo(/([^,]*/),/([^,]*/),/([^)]*/))/foo($2,$1,$3)/g

  現在讓我們把它打散來加以分析。寫出這個表達式的基本思路是找出foo()和它的括号中的三個參數的位置。第一個參數是用這個表達式來識别的::/([^,]*/),我們可以從裡向外來分析它:

  [^,] 除了逗号之外的任何字元

  [^,]* 0或者多個非逗号字元

  /([^,]*/) 将這些非逗号字元标記為,這樣可以在之後的替換模式表達式中引用它

  /([^,]*/), 我們必須找到0或者多個非逗号字元後面跟着一個逗号,并且非逗号字元那部分要标記出來以備後用。

  現在正是指出一個使用正規表達式常見錯誤的最佳時機。為什麼我們要使用[^,]*這樣的一個表 達式,而不是更加簡單直接的寫法,例如:.*,來比對第一個參數呢?設想我們使用模式.*來比對字元串"10,7,2",它應該比對"10,"還 是"10,7,"?為了解決這個兩義性(ambiguity),正規表達式規定一律按照最長的串來,在上面的例子中就是"10,7,",顯然這樣就找出了 兩個參數而不是我們期望的一個。是以,我們要使用[^,]*來強制取出第一個逗号之前的部分。

  這個表達式我們已經分析到了:foo(/([^,]*/),這一段可以簡單的翻譯為“當你找到 foo(就把其後直到第一個逗号之前的部分标記為”。然後我們使用同樣的辦法标記第二個參數為。對第三個參數的标記方法也是一樣,隻是我們要搜尋所有的字 符直到右括号。我們并沒有必要去搜尋第三個參數,因為我們不需要調整它的位置,但是這樣的模式能夠保證我們隻去替換那些有三個參數的foo()方法調用, 在foo()是一個重載(overoading)方法時這種明确的模式往往是比較保險的。然後,在替換部分,我們找到foo()的對應執行個體,然後利用标記 好的部分進行替換,是的第一和第二個參數交換位置。

  例2

  假設有一個CSV(comma separated value)檔案,裡面有一些我們需要的資訊,但是格式卻有問題,目前資料的列順序是:姓名,公司名,州名縮寫,郵政編碼,現在我們希望講這些資料重新組 織,以便在我們的某個軟體中使用,需要的格式為:姓名,州名縮寫-郵政編碼,公司名。也就是說,我們要調整列順序,還要合并兩個列來構成一個新列。另外, 我們的軟體不能接受逗号前後面有任何空格(包括空格和制表符)是以我們還必須要去掉逗号前後的所有空格。

  這裡有幾行我們現在的資料:

  Bill Jones, HI-TEK Corporation , CA, 95011

  Sharon Lee Smith, Design Works Incorporated, CA, 95012

  B. Amos , Hill Street Cafe, CA, 95013

  Alexander Weatherworth, The Crafts Store, CA, 95014

  ...

  我們希望把它變成這個樣子:

  Bill Jones,CA 95011,HI-TEK Corporation

  Sharon Lee Smith,CA 95012,Design Works Incorporated

  B. Amos,CA 95013,Hill Street Cafe

  Alexander Weatherworth,CA 95014,The Crafts Store

  ...

  我們将用兩個正規表達式來解決這個問題。第一個移動列和合并列,第二個用來去掉空格。

  下面就是第一個替換指令:

  :%s//([^,]*/),/([^,]*/),/([^,]*/),/(.*/)/, ,/

  這裡的方法跟例1基本一樣,第一個列(姓名)用這個表達式來比對:/([^,]*/),即第一 個逗号之前的所有字元,而姓名内容被用标記下來。公司名和州名縮寫字段用同樣的方法标記為和,而最後一個字段用/(.*/)來比對("比對所有字元直到行 末")。替換部分則引用上面标記的那些内容來進行構造。

  下嬲飧鎏婊幻钤蛴美慈コ嶄瘢?

  :%s/[ /t]*,[ /t]*/,/g

  我們還是分解來看:[ /t]比對空格/制表符,[ /t]* 比對0或多個空格/制表符,[ /t]*,比對0或多個空格/制表符後面再加一個逗号,最後,[ /t]*,[ /t]*比對0或多個空格/制表符接着一個逗号再接着0或多個空格/制表符。在替換部分,我們簡單的我們找到的所有東西替換成一個逗号。這裡我們使用了結 尾的可選的g參數,這表示在每行中對所有比對的串執行替換(而不是預設的隻替換第一個比對串)。

  例3

  假設有一個多字元的片斷重複出現,例如:

  Billy tried really hard

  Sally tried really really hard

  Timmy tried really really really hard

  Johnny tried really really really really hard

  而你想把"really"、"really really",以及任意數量連續出現的"really"字元串換成一個簡單的"very"(simple is good!),那麼以下指令:

  :%s//(really /)/(really /)*/very /

  就會把上述的文本變成:

  Billy tried very hard

  Sally tried very hard

  Timmy tried very hard

  Johnny tried very hard

  表達式/(really /)*比對0或多個連續的"really "(注意結尾有個空格),而/(really /)/(really /)* 比對1個或多個連續的"really "執行個體。

  困難的例子(不可思議的象形文字)

  Coming soon.

  不同工具中的正規表達式

  OK,你已經準備使用RE(regular expressions,正規表達式),但是你并準備使用vi。是以,在這裡我們給出一些在其他工具中使用RE的例子。另外,我還會總結一下你在不同程式之間使用RE可能發現的差別。

  當然,你也可以在Visual C++編輯器中使用RE。選擇Edit->Replace,然後選擇"Regular expression"選擇框,Find What輸入框對應上面介紹的vi指令:%s/pat1/pat2/g中的pat1部分,而Replace輸入框對應pat2部分。但是,為了得到vi的 執行範圍和g選項,你要使用Replace All或者适當的手工Find Next and Replace(譯者按:知道為啥有人罵微軟弱智了吧,雖然VC中可以選中一個範圍的文本,然後在其中執行替換,但是總之不夠vi那麼靈活和典雅)。

  sed

  Sed是Stream EDitor的縮寫,是Unix下常用的基于檔案和管道的編輯工具,可以在手冊中得到關于sed的詳細資訊。

  這裡是一些有趣的sed腳本,假定我們正在處理一個叫做price.txt的檔案。注意這些編輯并不會改變源檔案,sed隻是處理源檔案的每一行并把結果顯示在标準輸出中(當然很容易使用重定向來定制):

  sed腳本 描述

  sed 's/^$/d' price.txt 删除所有空行

  sed 's/^[ /t]*$/d' price.txt 删除所有隻包含空格或者制表符的行

  sed 's/"//g' price.txt 删除所有引号

  awk

  awk是一種程式設計語言,可以用來對文本資料進行複雜的分析和處理。可以在手冊中得到關于awk的詳細資訊。這個古怪的名字是它作者們的姓的縮寫(Aho,Weinberger和Kernighan)。

  在Aho,Weinberger和Kernighan的書The AWK Programming Language中有很多很好的awk的例子,請不要讓下面這些微不足道的腳本例子限制你對awk強大能力的了解。我們同樣假定我們針對 price.txt檔案進行處理,跟sed一樣,awk也隻是把結果顯示在終端上。

  awk腳本 描述

  awk ' !~ /^$/' price.txt 删除所有空行

  awk 'NF > 0' price.txt awk中一個更好的删除所有空行的辦法

  awk ' ~ /^[JT]/ ' price.txt 列印所有第二個字段是'J'或者'T'打頭的行中的第三個字段

  awk ' !~ /[Mm]isc/ {print + }' price.txt 針對所有第二個字段不包含'Misc'或者'misc'的行,列印第3和第4列的和(假定為數字)

  awk ' !~ /^[0-9]+/.[0-9]*$/ ' price.txt 列印所有第三個字段不是數字的行,這裡數字是指d.d或者d這樣的形式,其中d是0到9的任何數字

  awk ' ~ /John|Fred/ ' price.txt 如果第二個字段包含'John'或者'Fred'則列印整行

  grep

  grep是一個用來在一個或者多個檔案或者輸入流中使用RE進行查找的程式。它的name程式設計 語言可以用來針對檔案和管道進行處理。可以在手冊中得到關于grep的完整資訊。這個同樣古怪的名字來源于vi的一個指令,g/re/p,意思是 global regular expression print。

  下面的例子中我們假定在檔案phone.txt中包含以下的文本,——其格式是姓加一個逗号,然後是名,然後是一個制表符,然後是電話号碼:

  Francis, John 5-3871

  Wong, Fred 4-4123

  Jones, Thomas 1-4122

  Salazar, Richard 5-2522

  grep指令 描述

  grep '/t5-...1' phone.txt 把所有電話号碼以5開頭以1結束的行列印出來,注意制表符是用/t表示的

  grep '^S[^ ]* R' phone.txt 列印所有姓以S打頭和名以R打頭的行

  grep '^[JW]' phone.txt 列印所有姓開頭是J或者W的行

  grep ', ..../t' phone.txt 列印所有姓是4個字元的行,注意制表符是用/t表示的

  grep -v '^[JW]' phone.txt 列印所有不以J或者W開頭的行

  grep '^[M-Z]' phone.txt 列印所有姓的開頭是M到Z之間任一字元的行

  grep '^[M-Z].*[12]' phone.txt 列印所有姓的開頭是M到Z之間任一字元,并且點号号碼結尾是1或者2的行

  egrep

  egrep是grep的一個擴充版本,它在它的正規表達式中支援更多的元字元。下面的例子中我們假定在檔案phone.txt中包含以下的文本,——其格式是姓加一個逗号,然後是名,然後是一個制表符,然後是電話号碼:

  Francis, John 5-3871

  Wong, Fred 4-4123

  Jones, Thomas 1-4122

  Salazar, Richard 5-2522

  egrep command Description

  egrep '(John|Fred)' phone.txt 列印所有包含名字John或者Fred的行

  egrep 'John|22$|^W' phone.txt 列印所有包含John 或者以22結束或者以W的行

  egrep 'net(work)?s' report.txt 從report.txt中找到所有包含networks或者nets的行

  正規表達式文法支援情況

  指令或環境 . [ ] ^ $ /( /) /{ /} ? + | ( )

  vi X X X X X

  Visual C++ X X X X X

  awk X X X X X X X X

  sed X X X X X X

  Tcl X X X X X X X X X

  ex X X X X X X

  grep X X X X X X

  egrep X X X X X X X X X

  fgrep X X X X X

  perl X X X X X X X X X

  vi替換指令簡介

  Vi的替換指令:

  :ranges/pat1/pat2/g

  其中

  : 這是Vi的指令執行界面。

  range 是指令執行範圍的指定,可以使用百分号(%)表示所有行,使用點(.)表示目前行,使用美元符号($)表示最後一行。你還可以使用行号,例如10,20表 示第10到20行,.,$表示目前行到最後一行,.+2,$-5表示目前行後兩行直到全文的倒數第五行,等等。

  s 表示其後是一個替換指令。

  pat1 這是要查找的一個正規表達式,這篇文章中有一大堆例子。

  pat2 這是希望把比對串變成的模式的正規表達式,這篇文章中有一大堆例子。

  g 可選标志,帶這個标志表示替換将針對行中每個比對的串進行,否則則隻替換行中第一個比對串。

[ 編輯本段 ] 三、常用的正規表達式

  

  常用的正規表達式主要有以下幾種:

  比對中文字元的正規表達式: [/u4e00-/u9fa5]

  評注:比對中文還真是個頭疼的事,有了這個表達式就好辦了

  比對雙位元組字元(包括漢字在内):[^/x00-/xff]

  評注:可以用來計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1)

  比對空白行的正規表達式:/n/s*/r

  評注:可以用來删除空白行

  比對HTML标記的正規表達式:<(/S*?)[^>]*>.*?</>|<.*? />

  評注:網上流傳的版本太糟糕,上面這個也僅僅能比對部分,對于複雜的嵌套标記依舊無能為力

  比對首尾空白字元的正規表達式:^/s*|/s*$

  評注:可以用來删除行首行尾的空白字元(包括空格、制表符、換頁符等等),非常有用的表達式

  比對Email位址的正規表達式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*

  評注:表單驗證時很實用

  比對網址URL的正規表達式:[a-zA-z]+://[^/s]*

  評注:網上流傳的版本功能很有限,上面這個基本可以滿足需求

  比對帳号是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

  評注:表單驗證時很實用

  比對國内電話号碼:/d{4}-/d{7}|/d{3}-/d{8}

  評注:比對形式如 0511-4405222 或 021-87888822

  比對騰訊QQ号:[1-9][0-9]/{4,/}

  評注:騰訊QQ号從10000開始

  比對中國郵政編碼:[1-9]/d(?!/d)

  評注:中國郵政編碼為6位數字

  比對身份證:(^/d{15}|/d{18}$)

  評注:中國的身份證為15位或18位

  比對ip位址:/d+/./d+/./d+/./d+

  評注:提取ip位址時有用

  比對特定數字:

  ^[1-9]/d*$ //比對正整數

  ^-[1-9]/d*$ //比對負整數

  ^-?[1-9]/d*$ //比對整數

  ^[1-9]/d*|0$ //比對非負整數(正整數 + 0)

  ^-[1-9]/d*|0$ //比對非正整數(負整數 + 0)

  ^[1-9]/d*/./d*|0/./d*[1-9]/d*$ //比對正浮點數

  ^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$ //比對負浮點數

  ^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$ //比對浮點數

  ^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$ //比對非負浮點數(正浮點數 + 0)

  ^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$ //比對非正浮點數(負浮點數 + 0)

  評注:處理大量資料時有用,具體應用時注意修正

  比對特定字元串:

  ^[A-Za-z]+$ //比對由26個英文字母組成的字元串

  ^[A-Z]+$ //比對由26個英文字母的大寫組成的字元串

  ^[a-z]+$ //比對由26個英文字母的小寫組成的字元串

  ^[A-Za-z0-9]+$ //比對由數字和26個英文字母組成的字元串

  ^/w+$ //比對由數字、26個英文字母或者下劃線組成的字元串

  評注:最基本也是最常用的一些表達式

  Function IsRegu(Regu,s)

  '正規表達式校驗

  If Regu="" Then

  Exit Function

  End if

  Dim Re,Sre

  Set Re = New RegExp

  Re.Pattern = Regu

  Sre = Re.Test(s)

  If Sre = True Then

  IsRegu = True

  Else

  IsRegu = False

  End If

  End Function

  tmp="[email protected]"

  if (IsRegu("/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*",tmp )) =false then

  msgbox "E-mail位址不合法 !"

  FieldCheck#N=false

  end if

  不同的語言(如PHP和JAVA)、相同語言的不同類庫(如來自Sun的Java Regular Expression類庫跟Apache Jakarta的正規表達式類庫)間,用法會有所差别,在使用的時候,要注意這些差别。

[ 編輯本段 ] 四、Editplus等軟體中正則替換技巧

  正規表達式類

  【1】 正規表達式應用——替換指定内容到行尾

  【2】 正規表達式應用——數字替換[email protected],[email protected]

  【3】 正規表達式應用——删除每一行行尾的指定字元

  【4】 正規表達式應用——替換帶有半角括号的多行

  【5】 正規表達式應用——删除空行----------------------------江德華

  軟體技巧類

  ------------------------------------------------------

  【6】 軟體技巧——鍵盤記錄的注意事項

  【7】 軟體技巧——關閉文檔标簽的便捷方法

  【8】 軟體技巧——如何去掉 EditPlus 儲存文本檔案時的添加字尾提示?

  【9】 軟體技巧——提示找不到文法檔案的解決辦法

  【10】軟體技巧——設定editplus支援其它文字,如韓文[email protected]

  【11】軟體技巧——FTP 上傳的設定----------------------------李應文2.11漢化版

  【12】軟體技巧——如何禁用備份檔案功能?

  【13】軟體技巧——添加文法檔案、自動完成檔案、以及剪輯庫檔案

  工具內建類

  ------------------------------------------------------

  【14】工具內建——編譯器內建例子(Java、Borland C++、Visual C++、Inno Setup、nsis、C#)

  【15】工具內建——讓Editplus調試PHP程式----------------------avenger,[email protected]

  【16】工具內建——打造 PHP 調試環境(二)----------------------老七2.11漢化版

  【17】在 WINPE 中內建 EDITPLUS

  後續添加

  ------------------------------------------------------

  【18】支援帶UTF-8标記/不帶UTF-8标記的檔案

  每個步驟都說得很詳細了,就沒有必要貼圖了,體積不要太大才好。

  【1】正規表達式應用——替換指定内容到行尾

  原始文本如下面兩行

  abc aaaaa

  123 abc 444

  希望每次遇到“abc”,則替換“abc”以及其後到行尾的内容為“abc efg”

  即上面的文本最終替換為:

  abc efg

  123 abc efg

  解決:

  ① 在替換對話框,查找内容裡輸入“abc.*”

  ② 同時勾選“正規表達式”複選框,然後點選“全部替換”按鈕

  其中,符号的含義如下:

  “.” =比對任意字元

  “*” =比對0次或更多

  注意:其實就是正規表達式替換,這裡隻是把一些曾經提出的問題加以整理,單純從正規表達式本身來說,就可以引申出成千上萬種特例。

  【2】正規表達式應用——數字替換 ([email protected],[email protected])

  希望把

  asdadas123asdasdas456asdasdasd789asdasd

  替換為:

  asdadas[123]asdasdas[456]asdasdasd[789]asdasd

  在替換對話框裡面,勾選“正規表達式”複選框;

  在查找内容裡面輸入“[0-9][0-9][0-9]”,不含引号

  “替換為:”裡面輸入“[/0/1/2]”,不含引号

  範圍為你所操作的範圍,然後選擇替換即可。

  實際上這也是正規表達式的使用特例,“[0-9]”表示比對0~9之間的任何特例,同樣“[a-z]”就表示比對a~z之間的任何特例

  上面重複使用了“[0-9]”,表示連續出現的三個數字

  “/0”代表第一個“[0-9]”對應的原型,“/1”代表第二個“[0-9]”對應的原型,依此類推

  “[”、“]”為單純的字元,表示添加“[”或“]”,如果輸入“其它/0/1/2其它”,則替換結果為:

  asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd

  功能增強(by [email protected]):

  如果将查找内容“[0-9][0-9][0-9]”改為“[0-9]*[0-9]”,對應1 或 123 或 12345 或 ...

  大家根據需要定制

  相關内容還有很多,可以自己參考正規表達式的文法仔細研究一下

  【3】正規表達式應用——删除每一行行尾的指定字元

  因為這幾個字元在行中也是出現的,是以肯定不能用簡單的替換實作

  比如

  12345 1265345

  2345

  需要删除每行末尾的“345”

  這個也算正規表達式的用法,其實仔細看正規表達式應該比較簡單,不過既然有這個問題提出,說明對正規表達式還得有個認識過程,解決方法如下

  解決:

  在替換對話框中,啟用“正規表達式”複選框

  在查找内容裡面輸入“345$”

  這裡“$”表示從行尾比對

  如果從行首比對,可以用“^”來實作,不過 EditPlus 有另一個功能可以很簡單的删除行首的字元串

  a. 選擇要操作的行

  b. 編輯-格式-删除行注釋

  c. 在彈出對話框裡面輸入要清除的行首字元,确定

  【4】正規表達式應用——替換帶有半角括号的多行

  幾百個網頁中都有下面一段代碼:

  <script LANGUAGE="JavaScript1.1">

  <!--

  htmlAdWH('93163607', '728', '90');

  //-->

  </SCRIPT>

  我想把它們都去掉,可是找了很多search & replace的軟體,都是隻能對“一行”進行操作。

  EditPlus 打開幾百個網頁檔案還是比較順暢的,是以完全可以勝任這個工作。

  具體解決方法,在 Editplus 中使用正規表達式,由于“(”、“)”被用做預設表達式(或者可以稱作子表達式)的标志,是以查找

  “<script LANGUAGE="JavaScript1.1">/n<!--/nhtmlAdWH('93163607', '728', '90'.);/n//-->/n</SCRIPT>/n”

  時會提示查找不到,是以也就無法進行替換了,這時可以把“(”、“)”使用任意字元标記替代,即半角句号:“.”。替換内容為

  <script LANGUAGE="JavaScript1.1">/n<!--/nhtmlAdWH.'93163607', '728', '90'.;/n//-->/n</SCRIPT>/n

  在替換對話框啟用“正規表達式”選項,這時就可以完成替換了

  補充:([email protected])

  對( ) 這樣的特殊符号,應該用/( /)來表示,這也是很标準的regexp文法,可以寫為

  <script LANGUAGE="JavaScript1.1">/n<!--/nhtmlAdWH/('93163607', '728', '90'/);/n//-->/n</SCRIPT>/n

  【5】正規表達式應用——删除空行

  啟動EditPlus,打開待處理的文本類型檔案。

  ①、選擇“查找”菜單的“替換”指令,彈出文本替換對話框。選中“正規表達式”複選框,表明我們要在查找、替換中使用正規表達式。然後,選中“替換範圍”中的“目前檔案”,表明對目前檔案操作。

  ②、單擊“查找内容”組合框右側的按鈕,出現下拉菜單。

  ③、下面的操作添加正規表達式,該表達式代表待查找的空行。(技巧提示:空行僅包括空格符、制表符、回車符,且必須以這三個符号之一作為一行的開頭,并且以回車符結尾,查找空行的關鍵是構造代表空行的正規表達式)。

  直接在"查找"中輸入正規表達式“^[ /t]*/n”,注意/t前有空格符。

  (1)選擇“從行首開始比對”,“查找内容”組合框中出現字元“^”,表示待查找字元串必須出現在文本中一行的行首。

  (2)選擇“字元在範圍中”,那麼在“^”後會增加一對括号“[]”,目前插入點在括号中。括号在正規表達式中表示,文本中的字元比對括号中任意一個字元即符合查找條件。

  (3)按一下空格鍵,添加空格符。空格符是空行的一個組成成分。

  (4)選擇“制表符”,添加代表制表符的“/t”。

  (5)移動光标,将目前插入點移到“]”之後,然後選擇“比對 0 次或更多”,該操作會添加星号字元“*”。星号表示,其前面的括号“[]”内的空格符或制表符,在一行中出現0個或多個。

  (6)選擇“換行符”,插入“/n”,表示回車符。

  ④、“替換為”組合框保持空,表示删除查找到的内容。單擊“替換”按鈕逐個行删除空行,或單擊“全部替換”按鈕删除全部空行(注意:EditPlus有時存在“全部替換”不能一次性完全删除空行的問題,可能是程式BUG,需要多按幾次按鈕)。

  【6】軟體技巧——鍵盤記錄的注意事項

  EditPlus 的鍵盤記錄有些類似于 UltraEdit 的宏操作,不過功能相對單一,錄制的檔案可編輯性較差。

  由于基本無法編輯錄制的檔案,是以錄制的時候為了避免錄制失敗,推薦純粹使用鍵盤操作,以下是比較關鍵的幾個鍵盤組合:

  Ctrl+F = 調出查找對話框

  Ctrl+H = 調出替換對話框

  Alt+F4 = 關閉作用,比如,關閉查找對話框、關閉替換對話框,等等

  其它鍵盤快捷鍵在“幫助-快捷鍵清單”裡面可以很容易的查找到,這裡就不細說了。

  【7】軟體技巧——關閉文檔标簽的便捷方法

  右鍵單擊文檔标簽工具條,彈出菜單中選擇“标簽選項”,選中“用滑鼠中間的按鈕關閉”,這裡包括滑鼠的滾輪。

  【8】軟體技巧——如何去掉 EditPlus 儲存文本檔案時的添加字尾提示?

  如果你使用 EditPlus 進行文本編輯,那麼每次建立文本檔案,編輯後儲存時,盡管檔案類型下拉清單中顯示的是文本檔案, EditPlus 還是詢問你是否添加".txt"字尾,是不是很煩?

  解決方法:

  ① 在程式目錄建立一個空的檔案“template.txt”

  ② “工具-參數設定-模闆”裡面,單擊“添加”按鈕添加模闆,“菜單文本”這裡輸入“Text”,浏覽“template.txt”,之後确定即可

  ③ “檔案-建立-text”,就可以建立一個空的文本檔案,儲存時,這個檔案自動帶有擴充名".txt",也就避免了令人頭疼的确認

  ④ 模闆設定檔案名稱為“template.ini”,如果和主程式同一路徑,可以使用相對路徑

  羅嗦了點,不過管用

  要自動建立帶有某種字尾的檔案,方法同上。

  【9】軟體技巧——提示找不到文法檔案 *.stx 的解決辦法

  原因多為設定的文法檔案不存在或者是路徑設定不對。這是因為 EditPlus 的文法是設定檔案采用的是絕對路徑,而在你設定了文法檔案之後,再把程式複制到其它目錄,因而導緻 EditPlus 無法找到該文法檔案。

  解決辦法:

  在主程式目錄裡,找到 Setting.ini 這是 EditPlus 存放文法的檔案

  查找字尾為“.stx”、“acp”的文本内容,或者查找帶有磁碟機代號的行,比如

  Syntax file=C:/Program Files/EditPlus 2/cpp.stx

  那麼,就把”C:/Program Files/EditPlus 2/“替換成你目前軟體的路徑。

  其它提示找不到檔案的解決方法同上

  【10】軟體技巧——設定editplus支援其它文字,如韓文

  在editplus裡打開檔案,出來打開檔案對話框;然後點選“轉換器”後面的那個省略号,會出來自定義轉換器對話框;在右邊選擇你需要的編碼方式,添加到左邊,然後點确定;最後在下拉框中選擇需要的編碼方式,然後打開檔案即可。

  【11】軟體技巧——FTP 上傳的設定

  “檔案->遠端操作->FTP 上傳”在“設定”頁籤中設定好參數(“子目錄”前面應該加“/”如“/web/”),點選“确定”回到“FTP 上傳”頁籤,然後點選“上傳”即可;“批量上傳”的設定類似。

  【12】軟體技巧——如何禁用備份檔案功能?

  在“參數選擇”的檔案選項頁,禁用“'儲存時自動建立備份檔案”選項

  【13】軟體技巧——添加文法檔案、自動完成檔案、以及剪輯庫檔案

  要添加 *.STX(文法檔案)或 *.ACP(自動完成檔案):

  1. 選擇“參數選擇→文法”

  2. 單擊“添加”按鈕,命名,在“擴充名”部分輸入對應擴充名(不帶“.”)

  3. 浏覽/輸入 STX(文法檔案部分) 以及 ACP(自動完成檔案部分)。

  添加剪輯庫檔案(*.CTL)

  複制相應 *.CTL 檔案到軟體安裝目錄,重新啟動 EditPlus ,則系統自動識别。

  作者首頁有很多文法自動完成檔案下載下傳,位址

  http://editplus.com/files.html

  【14】工具內建——編譯器內建例子(Java、Borland C++、Visual C++、Inno Setup、nsis)

  在“工具→參數選擇→使用者工具”選項頁設定,設定步驟

  ① 設定組名稱,這裡也可以不設定

  ② 單擊“添加工具→應用程式”按鈕并進行如下設定

  ③ 各種類似"$(FilePath)"的參數可以在文本框右側的箭頭下拉菜單中擷取,具體含義如下

  參數 描述

  $(FilePath) 檔案路徑(檔案全名,含目錄和檔案名)

  $(FileDir) 檔案目錄(不帶檔案名)

  $(FileName) 檔案名(不帶目錄)

  $(FileNameNoExt) 不帶擴充名的檔案名(不帶目錄)

  $(FileExt) 擴充名(目前檔案)

  $(ProjectName) 工程名稱(目前工程名)

  $(CurLine) 目前行号(光标位置處的行号)

  $(CurCol) 目前列号(光标位置處的列号)

  $(CurSel) 目前文本(插入目前標明文本)

  $(CurWord) 目前單詞(插入目前單詞)

  $(WindowList) 顯示目前視窗清單并選擇特定檔案

  例子 1. Java 編譯器

  菜單文本:Java 編譯器

  指令:c:/java/bin/javac.exe

  參數:"$(FilePath)"

  初始目錄:$(FileDir)

  捕獲輸出:開啟

  要運作已編譯的 Java 類檔案,你可以進行如下設定:

  菜單文本:Java

  指令:c:/java/bin/java.exe

  參數:$(FileNameNoExt)

  初始目錄:$(FileDir)

  “指令”部分應當替換為實際的 Java 解釋器的路徑。

  例子 2. Borland C++

  菜單文本:Borland C

  指令:c:/bc/bin/bcc32.exe

  參數:-Ic:/bc/include -Lc:/bc/lib -n$(FileDir) $(FilePath)

  初始目錄:c:/bc/bin

  捕獲輸出:開啟

  例子 3. Visual C++

  菜單文本:Visual C++

  指令:c:/msdev/vc98/bin/cl.exe

  參數:"$(FilePath)"

  初始目錄:$(FileDir)

  捕獲輸出:開啟

  例子 4. Inno Setup

  菜單文本:編譯 Inno

  指令:C:/Program Files/Inno Setup 4/Compil32.exe”

  參數:/cc $(FileName)

  初始目錄:$(FileDir)

  捕獲輸出:開啟

  例子 5. nsis

  菜單文本:編譯 nsis

  指令:C:/NSIS/makensis.exe

  參數:$(FileName)

  初始目錄:$(FileDir)

  捕獲輸出:開啟

  例子 6. C#

  菜單文本:編譯 C#

  指令:C:/WINDOWS/Microsoft.NET/Framework/v1.0.3705/csc.exe

  參數:$(FileName)

  初始目錄:$(FileDir)

  捕獲輸出:開啟

  在上面設定中,在指令部分,必須使用系統中各自編譯器的絕對路徑。

  設定完畢後,你可以在“工具”菜單運作對應工具了,運作結果會顯示在底部的輸出視窗,你也可以通過快捷鍵(Ctrl + 0-9) 運作,或者是通過“使用者工具欄”的快捷按鈕運作。

  要運作已編譯的 *.exe 檔案,你可以進行如下設定(此時可執行檔案需要和編譯檔案同名):

  菜單文本:Run

  指令:$(FileNameNoExt)

  參數:

  初始目錄:$(FileDir)

  【15】工具內建—— 讓Editplus調試PHP程式

  1:打開Editplus,選擇"工具->配置使用者工具..."菜單。

  2:在彈出的視窗中選擇"添加工具->應用程式",給新程式起一個好記的名字,比如這裡 我們用"Debug PHP",在"菜單文本"中輸入"Debug PHP"。點選"指令行"右邊的按鈕,找到你的php.exe所在的路徑,例如這裡是"c:/php/php.exe"。再點選"參數"右邊的下拉按鈕選 擇"檔案路徑",最後再把"捕獲輸出"前面的複選框選上。

  3:現在測試一下,建立一個php檔案,按快捷鍵Ctrl+1可以激活剛才我們設定的工具(如 果你設定了多個工具,快捷鍵可能會有所不同),現在你可以看到它已經能正常工作了。但是還有一點不太理想:如果你的PHP程式出錯,在輸出視窗會提示你第 幾行出錯 ,單擊這一行提示,Editplus老是提示你找不到某某檔案,是否建立。接下下我們要修正這個功能。

  4:打開剛才使用者工具設定視窗,找到剛才設定的"Debug PHP"工具。點選"捕獲輸出"複選框旁邊的"輸出模式"按鈕,會彈出一個定義輸出模式的窗體,把"使用預設輸出模式"前面的複選框去掉, 在"正規表達式"這一項的文本框中輸入" ^.+ in (.+) line ([0-9]+) "(不包括引号),細心的朋友可能會發現,這裡使用的也正規表達式的文法。然後,在下面的"檔案名"下拉菜單中選擇"預設表達式 1",即上邊正規表達式中的第一個參數,"行"下拉菜單項選擇"預設表達式 2","列"下拉項保持為空。然後儲存設定。

  5:好了,現在再來試一下吧,輕按兩下出錯的行數,Editplus就會自動激活出錯檔案,并把光标定位到出錯行,是不是特别友善呢?!

  現在,Editplus經過我們的"改造",已經可以即時的調試PHP檔案了,雖然還不是"可視化"界面的,但對于一些平常的小程式來查錯還是非常好用的。Editplus真是不款不可多得的好工具,如果你有什麼使用技巧,不要忘了大家一起分享哦。^O^

  如果不能切換錯誤行号,請嘗試作如下修改: (by [email protected])

  1.php.ini 中html_errors = Off打開

  //如果你不打開,3.中的表達式要修改

  2.參數改成:-q -f "$(FilePath)"

  //不加"符号的話檔案名有空格的檔案調試失敗。。

  //-q不輸出html頭資訊,你去掉也行,不過調試時候你一般用不到那些header資訊

  3." ^.+ in (.+) line ([0-9]+) " 改成 "^.+ in (.+) on line ([0-9]+)$"

  //如果還是不行,請注意調試結果,自己修改表達式來取出檔案名和行号

  【16】工具內建——打造 PHP 調試環境(二)

  1: 把剪輯庫定位在 PHP4 Functions 上就可以在編輯時, 利用[插入]->[比對剪輯]指令,就可以自動完成末輸入完整的 PHP 函數(或直接按 F2 鍵)

  2: 類似上面,在選擇部分文字後,同樣可以自動完成。(同 F2)

  3: 在[參數選擇]->[設定和文法]->PHP->自動完成, 選擇目錄下的 php.acp 檔案,你可以定制自己的自動完成方式.

  4: 想要即時預覽檔案,可在[參數選擇]->[工具]->WEB 伺服器中添加本地目錄,(注意不要加 http:// , 應是一個有效的站點)。

  如: 主機->localhost/php | 根目錄->D:/php

  主機->localhost/asp | 根目錄->D:/asp

  主機->localhost/cgi | 根目錄->D:/cgi

  完成設定後隻要腳本檔案位于這些目錄下(子目錄也沒問題), 就能夠正确解釋.

  5: 各種文法和模闆檔案可以在 http://editplus.com/files.html 獲得,可根據需要選用和編輯。

  6: Ctrl+F11 可顯示目前檔案中的函數清單.

  7: 添加各種使用者工具.如:

  啟動MYSQL伺服器管理工具->C:/mysql/bin/winmysqladmin.exe

  啟動Apache伺服器->C:/Apache/bin/Apache.exe -k start

  啟動Apache伺服器->C:/Apache/bin/Apache.exe -k stop (shutdown)

  8: DBG 附帶有一個 prof_results.php 檔案,可剖析 PHP 程式的性能.

  雖不是真正的調試器,但已經夠了.

  OK! 經過改造後,是不是有點象一個 IDE 什麼?還差點,沒有即時幫助...看我的,再來:

  9: 把 php_manual_en.chm (最好是擴充幫助手冊)加入到使用者工具中, 當遇到需要參考的關鍵字時, 把光标定位其上, 按下快捷鍵 Ctrl+1, 看到了嗎.

  在輸入時有想不起來的函數名時, 先按照第 1 條的方法調出函數, 然後...怎麼樣?

  以上有的是對于調試工具的設定,由于此類工具比較多,大家設定時參考以上的基本就差不多了,是以就不過多的列舉了。

  【17】在 WINPE 中內建 EDITPLUS

  可以基于目前的bartpe做得WINPE中,菜單使用nu2menu制作

  預設位置為 /programs/editplus/

  預設系統位置為CD光牒的 i386 目錄

  i386/system32 的 autorun.bat 中添加外殼內建(系統右鍵)

  regedit /s %SystemDrive%/programs/editplus/REG.REG

  regsvr32 /s /programs/editplus/EPPSHELL.DLL

  (reg.reg儲存了epp的工具欄資訊,當然注冊使用者也可以放置注冊資訊)

  複制editplus安裝包裡面的檔案到programs/editplus/,注意,如果有setting.ini,删掉該檔案,在nu2menu裡面加入以下句子(可以根據需要安排位于特定菜單條目下)

  <MITEM TYPE="ITEM" DISABLED="@Not(@FileExists(@GetProgramDrive()/Programs/EditPlus/editplus.exe))" CMD="RUN"

  FUNC="@GetProgramDrive()/Programs/EditPlus/editplus.exe">EditPlus 文本編輯</MITEM>

  【18】支援帶UTF-8标記/不帶UTF-8标記的檔案 [email protected]提出并測試

  這裡Byte Order Mark翻譯為标記/檔案頭/标簽

  參數選擇-檔案-裡面設定“支援不帶有UTF-8檔案頭的UTF-8檔案”,我這裡翻譯标簽為UTF-8檔案頭,如果複選該項,應該是儲存為不帶标簽的Utf-8,如果不複選,應該是儲存成帶有BOM的UTF-8。

  這樣就可以打開帶簽名的UTF-8檔案,并且可以正常編輯,但是又不能打開不帶簽名的了,想要打開不帶簽名的還需要改回來...不過雖然有點麻煩,但是總算能用了

  1.驗證使用者名和密碼:("^[a-zA-Z]/w{5,15}$")正确格式:"[A-Z][a-z]_[0-9]"組成,并且第一個字必須為字母6~16位;

  2.驗證電話号碼:("^(/d{3.4}-)/d{7,8}$")正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx;

  3.驗證身份證号(15位或18位數字):("^/d{15}|/d{18}$");

  4.驗證Email位址:("^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$");

  5.隻能輸入由數字和26個英文字母組成的字元串:("^[A-Za-z0-9]+$") ;

  6.整數或者小數:^[0-9]+/.{0,1}[0-9]{0,2}$

  7.隻能輸入數字:"^[0-9]*$"。

  8.隻能輸入n位的數字:"^/d{n}$"。

  9.隻能輸入至少n位的數字:"^/d{n,}$"。

  10.隻能輸入m~n位的數字:。"^/d{m,n}$"

  11.隻能輸入零和非零開頭的數字:"^(0|[1-9][0-9]*)$"。

  12.隻能輸入有兩位小數的正實數:"^[0-9]+(.[0-9]{2})?$"。

  13.隻能輸入有1~3位小數的正實數:"^[0-9]+(.[0-9]{1,3})?$"。

  14.隻能輸入非零的正整數:"^/+?[1-9][0-9]*$"。

  15.隻能輸入非零的負整數:"^/-[1-9][]0-9"*$。

  16.隻能輸入長度為3的字元:"^.{3}$"。

  17.隻能輸入由26個英文字母組成的字元串:"^[A-Za-z]+$"。

  18.隻能輸入由26個大寫英文字母組成的字元串:"^[A-Z]+$"。

  19.隻能輸入由26個小寫英文字母組成的字元串:"^[a-z]+$"。

  20.驗證是否含有^%&',;=?$/"等字元:"[^%&',;=?$/x22]+"。

  21.隻能輸入漢字:"^[/u4e00-/u9fa5]{0,}$"

  22.驗證URL:"^http://([/w-]+/.)+[/w-]+(/[/w-./?%&=]*)?$"。

  23.驗證一年的12個月:"^(0?[1-9]|1[0-2])$"正确格式為:"01"~"09"和"1"~"12"。

  24.驗證一個月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式為;"01"~"09"和"1"~"31"。

  •

  –

  •

  –

  •

  –

  •

  –.(小圓點)

  比對除換行符号外的任意字元

  /w

  比對字母、數字、下劃線和漢字

  /s

  比對任意空白字元

  /d

  比對數字

  /b

  比對單詞的開始或結束

  ^

  比對字元串的開始,或排除

  $

  比對字元串的結束

  以上都是單個字元比對

  如果要求比對元字元中的符号,則需要加反斜杠。例如/+表示比對加号

  www.zjei.net和www/.zjei/.net

  *

  重複零次或多次

  +

  重複一次或多次

  ?

  重複零次或一次

  {n}

  重複n次

  {n,}

  至少重複n次

  {n,m}

  重複n到m次

  /d{1,3}/./d{1,3}/./d{1,3}/./d{1,3}

  ^w{3}/..+/./w+$

  []

  表示比對中括号中的任一字元

  ()

  小括号内的為一個整體

  |

  前後兩者任意比對一種

  /(?0/d{2}[)-]?/d{8}

  (/(0/d{2}/)/d{8})|(0/d{2}-/d{8})|0/d{2}/d{8}

  /W:與/w相反

  /S:與/s相反

  /D:與/d相反

  /B:與/b相反

  [^something]:與[something]相反

  0/d{2}-/d{8}

  /b/w{6}/b

  ^/w+

  <a[^>]+>

  Windows98|Windows2000|WindosXP

  ((2[0-4]/d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25[0-5]|[01]?/d/d?)

  ^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$

  ^/+?[1-9][0-9]*$和^/-[1-9][]0-9“*$

  ^[A-Za-z]+$和^[A-Z]+$和^[a-z]+$

  ^[a-zA-Z]/w{5,15}$