$ 匹配行結(jié)束符,。例如正則表達(dá)式weasel$ 能夠匹配字符串"He's a weasel"的末尾,,但是不能匹配字符串"They are a bunch of weasels."。 ^ 匹配一行的開(kāi)始,。例如正則表達(dá)式^When in能夠匹配字符串"When in the course of human events"的開(kāi)始,,但是不能匹配"What and When in the"。 * 匹配0或多個(gè)正好在它之前的那個(gè)字符,。例如正則表達(dá)式.*意味著能夠匹配任意數(shù)量的任何字符,。 \ 這是引用符,用來(lái)將這里列出的這些元字符當(dāng)作普通的字符來(lái)進(jìn)行匹配,。例如正則表達(dá)式\$被用來(lái)匹配美元符號(hào),,而不是行尾,類似的,正則表達(dá)式\.用來(lái)匹配點(diǎn)字符,,而不是任何字符的通配符,。 [ ] [c1-c2] [^c1-c2] 匹配括號(hào)中的任何一個(gè)字符。例如正則表達(dá)式r[aou]t匹配rat,、rot和rut,,但是不匹配ret??梢栽诶ㄌ?hào)中使用連字符-來(lái)指定字符的區(qū)間,,例如正則表達(dá)式[0-9]可以匹配任何數(shù)字字符;還可以制定多個(gè)區(qū)間,,例如正則表達(dá)式[A-Za-z]可以匹配任何大小寫字母,。另一個(gè)重要的用法是“排除”,要想匹配除了指定區(qū)間之外的字符——也就是所謂的補(bǔ)集——在左邊的括號(hào)和第一個(gè)字符之間使用^字符,,例如正則表達(dá)式[^269A-Z] 將匹配除了2,、6、9和所有大寫字母之外的任何字符,。 \< \> 匹配詞(word)的開(kāi)始(\<)和結(jié)束(\>),。例如正則表達(dá)式\<the能夠匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the",。注意:這個(gè)元字符不是所有的軟件都支持的。 \( \) 將 \( 和 \) 之間的表達(dá)式定義為“組”(group),,并且將匹配這個(gè)表達(dá)式的字符保存到一個(gè)臨時(shí)區(qū)域(一個(gè)正則表達(dá)式中最多可以保存9個(gè)),,它們可以用 到 的符號(hào)來(lái)引用。 | 將兩個(gè)匹配條件進(jìn)行邏輯“或”(Or)運(yùn)算,。例如正則表達(dá)式(him|her) 匹配"it belongs to him"和"it belongs to her",,但是不能匹配"it belongs to them."。注意:這個(gè)元字符不是所有的軟件都支持的,。 + 匹配1或多個(gè)正好在它之前的那個(gè)字符,。例如正則表達(dá)式9+匹配9、99,、99,、9999、99999,、……(一個(gè)或一個(gè)以上“9”),。注意:這個(gè)元字符不是所有的軟件都支持的。 匹配0或1個(gè)正好在它之前的那個(gè)字符,。注意:這個(gè)元字符不是所有的軟件都支持的,。 \{i\} \{i,j\} 匹配指定數(shù)目的字符,這些字符是在它之前的表達(dá)式定義的,。例如正則表達(dá)式A[0-9]\{3\} 能夠匹配字符"A"后面跟著正好3個(gè)數(shù)字字符的串,,例如A123,、A348等,但是不匹配A1234,。而正則表達(dá)式[0-9]\{4,6\} 匹配連續(xù)的任意4個(gè),、5個(gè)或者6個(gè)數(shù)字字符。注意:這個(gè)元字符不是所有的軟件都支持的,。 最簡(jiǎn)單的元字符是點(diǎn),,它能夠匹配任何單個(gè)字符(注意不包括新行符)。假定有個(gè)文件test.txt包含以下幾行內(nèi)容: he is a rat he is in a rut the food is Rotten I like root beer 我們可以使用grep命令來(lái)測(cè)試我們的正則表達(dá)式,,grep命令使用正則表達(dá)式去嘗試匹配指定文件的每一行,,并將至少有一處匹配表達(dá)式的所有行顯示出來(lái)。命令 grep r.t test.txt 在test.txt文件中的每一行中搜索正則表達(dá)式r.t,,并打印輸出匹配的行,。正則表達(dá)式r.t匹配一個(gè)r接著任何一個(gè)字符再接著一個(gè)t。所以它將匹配文件中的rat和rut,,而不能匹配Rotten中的Rot,,因?yàn)檎齽t表達(dá)式是大小寫敏感的。要想同時(shí)匹配大寫和小寫字母,,應(yīng)該使用字符區(qū)間元字符(方括號(hào)),。正則表達(dá)式[Rr]能夠同時(shí)匹配R和r。所以,,要想匹配一個(gè)大寫或者小寫的r接著任何一個(gè)字符再接著一個(gè)t就要使用這個(gè)表達(dá)式:[Rr].t,。 要想匹配行首的字符要使用抑揚(yáng)字符(^)——又是也被叫做插入符。例如,,想找到text.txt中行首"he"打頭的行,,你可能會(huì)先用簡(jiǎn)單表達(dá)式he,但是這會(huì)匹配第三行的the,,所以要使用正則表達(dá)式^he,,它只匹配在行首出現(xiàn)的h。 有時(shí)候指定“除了×××都匹配”會(huì)比較容易達(dá)到目的,,當(dāng)抑揚(yáng)字符(^)出現(xiàn)在方括號(hào)中是,,它表示“排除”,例如要匹配he ,,但是排除前面是t or s的情況(也就是the和she),,可以使用:[^st]he。 可以使用方括號(hào)來(lái)指定多個(gè)字符區(qū)間,。例如正則表達(dá)式[A-Za-z]匹配任何字母,,包括大寫和小寫的;正則表達(dá)式[A-Za-z][A-Za-z]* 匹配一個(gè)字母后面接著0或者多個(gè)字母(大寫或者小寫)。當(dāng)然我們也可以用元字符+做到同樣的事情,,也就是:[A-Za-z]+ ,,和[A-Za-z][A-Za-z]*完全等價(jià)。但是要注意元字符+ 并不是所有支持正則表達(dá)式的程序都支持的,。關(guān)于這一點(diǎn)可以參考后面的正則表達(dá)式語(yǔ)法支持情況,。 要指定特定數(shù)量的匹配,要使用大括號(hào)(注意必須使用反斜杠來(lái)轉(zhuǎn)義),。想匹配所有100和1000的實(shí)例而排除10和10000,,可以使用:10\{2,3\},這個(gè)正則表達(dá)式匹配數(shù)字1后面跟著2或者3個(gè)0的模式,。在這個(gè)元字符的使用中一個(gè)有用的變化是忽略第二個(gè)數(shù)字,,例如正則表達(dá)式0\{3,\} 將匹配至少3個(gè)連續(xù)的0。 簡(jiǎn)單的例子 這里有一些有代表性的,、比較簡(jiǎn)單的例子,。 vi 命令 作用 :%s/ */ /g 把一個(gè)或者多個(gè)空格替換為一個(gè)空格。 :%s/ *$// 去掉行尾的所有空格,。 :%s/^/ / 在每一行頭上加入一個(gè)空格,。 :%s/^[0-9][0-9]* // 去掉行首的所有數(shù)字字符。 :%s/b[aeio]g/bug/g 將所有的bag,、beg,、big和bog改為bug。 :%s/t\([aou]\)g/h$t/g 將所有tag,、tog和tug分別改為hat,、hot和hug(注意用group的用法和使用引用前面被匹配的字符)。 中級(jí)的例子(神奇的咒語(yǔ)) 例1 將所有方法foo(a,b,c)的實(shí)例改為foo(b,a,c),。這里a,、b和c可以是任何提供給方法foo()的參數(shù),。也就是說(shuō)我們要實(shí)現(xiàn)這樣的轉(zhuǎn)換: 之前 之后 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) 下面這條替換命令能夠?qū)崿F(xiàn)這一魔法: :%s/foo(\([^,]*\),\([^,]*\),\([^)]*\))/foo($2,$1,$3)/g 現(xiàn)在讓我們把它打散來(lái)加以分析,。寫出這個(gè)表達(dá)式的基本思路是找出foo()和它的括號(hào)中的三個(gè)參數(shù)的位置。第一個(gè)參數(shù)是用這個(gè)表達(dá)式來(lái)識(shí)別的::\([^,]*\),,我們可以從里向外來(lái)分析它: [^,] 除了逗號(hào)之外的任何字符 [^,]* 0或者多個(gè)非逗號(hào)字符 \([^,]*\) 將這些非逗號(hào)字符標(biāo)記為,,這樣可以在之后的替換模式表達(dá)式中引用它 \([^,]*\), 我們必須找到0或者多個(gè)非逗號(hào)字符后面跟著一個(gè)逗號(hào),并且非逗號(hào)字符那部分要標(biāo)記出來(lái)以備后用,。 現(xiàn)在正是指出一個(gè)使用正則表達(dá)式常見(jiàn)錯(cuò)誤的最佳時(shí)機(jī),。為什么我們要使用[^,]*這樣的一個(gè)表達(dá)式,而不是更加簡(jiǎn)單直接的寫法,,例如:.*,,來(lái)匹配第一個(gè)參數(shù)呢?設(shè)想我們使用模式.*來(lái)匹配字符串"10,7,2",它應(yīng)該匹配"10,"還是"10,7,",?為了解決這個(gè)兩義性(ambiguity),,正則表達(dá)式規(guī)定一律按照最長(zhǎng)的串來(lái),在上面的例子中就是"10,7,",,顯然這樣就找出了兩個(gè)參數(shù)而不是我們期望的一個(gè),。所以,我們要使用[^,]*來(lái)強(qiáng)制取出第一個(gè)逗號(hào)之前的部分,。 這個(gè)表達(dá)式我們已經(jīng)分析到了:foo(\([^,]*\),,這一段可以簡(jiǎn)單的翻譯為“當(dāng)你找到foo(就把其后直到第一個(gè)逗號(hào)之前的部分標(biāo)記為”。然后我們使用同樣的辦法標(biāo)記第二個(gè)參數(shù)為,。對(duì)第三個(gè)參數(shù)的標(biāo)記方法也是一樣,,只是我們要搜索所有的字符直到右括號(hào)。我們并沒(méi)有必要去搜索第三個(gè)參數(shù),,因?yàn)槲覀儾恍枰{(diào)整它的位置,,但是這樣的模式能夠保證我們只去替換那些有三個(gè)參數(shù)的foo()方法調(diào)用,在foo()是一個(gè)重載(overoading)方法時(shí)這種明確的模式往往是比較保險(xiǎn)的,。然后,,在替換部分,我們找到foo()的對(duì)應(yīng)實(shí)例,,然后利用標(biāo)記好的部分進(jìn)行替換,,是的第一和第二個(gè)參數(shù)交換位置。 例2 假設(shè)有一個(gè)CSV(comma separated value)文件,,里面有一些我們需要的信息,,但是格式卻有問(wèn)題,目前數(shù)據(jù)的列順序是:姓名,,公司名,,州名縮寫,郵政編碼,,現(xiàn)在我們希望講這些數(shù)據(jù)重新組織,,以便在我們的某個(gè)軟件中使用,需要的格式為:姓名,,州名縮寫-郵政編碼,,公司名。也就是說(shuō),,我們要調(diào)整列順序,,還要合并兩個(gè)列來(lái)構(gòu)成一個(gè)新列。另外,,我們的軟件不能接受逗號(hào)前后面有任何空格(包括空格和制表符)所以我們還必須要去掉逗號(hào)前后的所有空格,。 這里有幾行我們現(xiàn)在的數(shù)據(jù): 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 ... 我們希望把它變成這個(gè)樣子: 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 ... 我們將用兩個(gè)正則表達(dá)式來(lái)解決這個(gè)問(wèn)題,。第一個(gè)移動(dòng)列和合并列,第二個(gè)用來(lái)去掉空格,。 下面就是第一個(gè)替換命令: :%s/\([^,]*\),\([^,]*\),\([^,]*\),\(.*\)/, ,/ 這里的方法跟例1基本一樣,,第一個(gè)列(姓名)用這個(gè)表達(dá)式來(lái)匹配:\([^,]*\),即第一個(gè)逗號(hào)之前的所有字符,,而姓名內(nèi)容被用標(biāo)記下來(lái),。公司名和州名縮寫字段用同樣的方法標(biāo)記為和,而最后一個(gè)字段用\(.*\)來(lái)匹配("匹配所有字符直到行末"),。替換部分則引用上面標(biāo)記的那些內(nèi)容來(lái)進(jìn)行構(gòu)造,。 下面這個(gè)替換命令則用來(lái)去除空格: :%s/[ \t]*,[ \t]*/,/g 我們還是分解來(lái)看:[ \t]匹配空格/制表符,[ \t]* 匹配0或多個(gè)空格/制表符,,[ \t]*,匹配0或多個(gè)空格/制表符后面再加一個(gè)逗號(hào),,最后,[ \t]*,[ \t]*匹配0或多個(gè)空格/制表符接著一個(gè)逗號(hào)再接著0或多個(gè)空格/制表符,。在替換部分,,我們簡(jiǎn)單的我們找到的所有東西替換成一個(gè)逗號(hào)。這里我們使用了結(jié)尾的可選的g參數(shù),,這表示在每行中對(duì)所有匹配的串執(zhí)行替換(而不是缺省的只替換第一個(gè)匹配串),。 例3 假設(shè)有一個(gè)多字符的片斷重復(fù)出現(xiàn),例如: 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",,以及任意數(shù)量連續(xù)出現(xiàn)的"really"字符串換成一個(gè)簡(jiǎn)單的"very"(simple is good!),那么以下命令: :%s/\(really \)\(really \)*/very / 就會(huì)把上述的文本變成: Billy tried very hard Sally tried very hard Timmy tried very hard Johnny tried very hard 表達(dá)式\(really \)*匹配0或多個(gè)連續(xù)的"really "(注意結(jié)尾有個(gè)空格),,而\(really \)\(really \)* 匹配1個(gè)或多個(gè)連續(xù)的"really "實(shí)例,。 困難的例子(不可思議的象形文字) Coming soon. 不同工具中的正則表達(dá)式 OK,你已經(jīng)準(zhǔn)備使用RE(regular expressions,,正則表達(dá)式),,但是你并準(zhǔn)備使用vi。所以,,在這里我們給出一些在其他工具中使用RE的例子,。另外,我還會(huì)總結(jié)一下你在不同程序之間使用RE可能發(fā)現(xiàn)的區(qū)別,。 當(dāng)然,,你也可以在Visual C++編輯器中使用RE,。選擇Edit->Replace,,然后選擇"Regular expression"選擇框,F(xiàn)ind What輸入框?qū)?yīng)上面介紹的vi命令:%s/pat1/pat2/g中的pat1部分,,而Replace輸入框?qū)?yīng)pat2部分,。但是,,為了得到vi的執(zhí)行范圍和g選項(xiàng),你要使用Replace All或者適當(dāng)?shù)氖止ind Next and Replace(譯者按:知道為啥有人罵微軟弱智了吧,,雖然VC中可以選中一個(gè)范圍的文本,,然后在其中執(zhí)行替換,但是總之不夠vi那么靈活和典雅),。 sed Sed是Stream EDitor的縮寫,,是Unix下常用的基于文件和管道的編輯工具,可以在手冊(cè)中得到關(guān)于sed的詳細(xì)信息,。 這里是一些有趣的sed腳本,,假定我們正在處理一個(gè)叫做price.txt的文件。注意這些編輯并不會(huì)改變?cè)次募?,sed只是處理源文件的每一行并把結(jié)果顯示在標(biāo)準(zhǔn)輸出中(當(dāng)然很容易使用重定向來(lái)定制): sed腳本 描述 sed 's/^$/d' price.txt 刪除所有空行 sed 's/^[ \t]*$/d' price.txt 刪除所有只包含空格或者制表符的行 sed 's/"http://g' price.txt 刪除所有引號(hào) awk awk是一種編程語(yǔ)言,,可以用來(lái)對(duì)文本數(shù)據(jù)進(jìn)行復(fù)雜的分析和處理??梢栽谑謨?cè)中得到關(guān)于awk的詳細(xì)信息,。這個(gè)古怪的名字是它作者們的姓的縮寫(Aho,Weinberger和Kernighan),。 在Aho,,Weinberger和Kernighan的書(shū)The AWK Programming Language中有很多很好的awk的例子,請(qǐng)不要讓下面這些微不足道的腳本例子限制你對(duì)awk強(qiáng)大能力的理解,。我們同樣假定我們針對(duì)price.txt文件進(jìn)行處理,,跟sed一樣,awk也只是把結(jié)果顯示在終端上,。 awk腳本 描述 awk ' !~ /^$/' price.txt 刪除所有空行 awk 'NF > 0' price.txt awk中一個(gè)更好的刪除所有空行的辦法 awk ' ~ /^[JT]/ ' price.txt 打印所有第二個(gè)字段是'J'或者'T'打頭的行中的第三個(gè)字段 awk ' !~ /[Mm]isc/ {print + }' price.txt 針對(duì)所有第二個(gè)字段不包含'Misc'或者'misc'的行,,打印第3和第4列的和(假定為數(shù)字) awk ' !~ /^[0-9]+\.[0-9]*$/ ' price.txt 打印所有第三個(gè)字段不是數(shù)字的行,這里數(shù)字是指d.d或者d這樣的形式,,其中d是0到9的任何數(shù)字 awk ' ~ /John|Fred/ ' price.txt 如果第二個(gè)字段包含'John'或者'Fred'則打印整行 grep grep是一個(gè)用來(lái)在一個(gè)或者多個(gè)文件或者輸入流中使用RE進(jìn)行查找的程序,。它的name編程語(yǔ)言可以用來(lái)針對(duì)文件和管道進(jìn)行處理??梢栽谑謨?cè)中得到關(guān)于grep的完整信息,。這個(gè)同樣古怪的名字來(lái)源于vi的一個(gè)命令,g/re/p,,意思是global regular expression print,。 下面的例子中我們假定在文件phone.txt中包含以下的文本,——其格式是姓加一個(gè)逗號(hào),,然后是名,,然后是一個(gè)制表符,然后是電話號(hào)碼: Francis, John 5-3871 Wong, Fred 4-4123 Jones, Thomas 1-4122 Salazar, Richard 5-2522 grep命令 描述 grep '\t5-...1' phone.txt 把所有電話號(hào)碼以5開(kāi)頭以1結(jié)束的行打印出來(lái),,注意制表符是用\t表示的 grep '^S[^ ]* R' phone.txt 打印所有姓以S打頭和名以R打頭的行 grep '^[JW]' phone.txt 打印所有姓開(kāi)頭是J或者W的行 grep ', ....\t' phone.txt 打印所有姓是4個(gè)字符的行,,注意制表符是用\t表示的 grep -v '^[JW]' phone.txt 打印所有不以J或者W開(kāi)頭的行 grep '^[M-Z]' phone.txt 打印所有姓的開(kāi)頭是M到Z之間任一字符的行 grep '^[M-Z].*[12]' phone.txt 打印所有姓的開(kāi)頭是M到Z之間任一字符,,并且點(diǎn)號(hào)號(hào)碼結(jié)尾是1或者2的行 egrep egrep是grep的一個(gè)擴(kuò)展版本,它在它的正則表達(dá)式中支持更多的元字符,。下面的例子中我們假定在文件phone.txt中包含以下的文本,,——其格式是姓加一個(gè)逗號(hào),然后是名,,然后是一個(gè)制表符,,然后是電話號(hào)碼: 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結(jié)束或者以W的行 egrep 'net(work)?s' report.txt 從report.txt中找到所有包含networks或者nets的行 正則表達(dá)式語(yǔ)法支持情況 命令或環(huán)境 . [ ] ^ $ \( \) \{ \} ? + | ( ) 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替換命令簡(jiǎn)介 Vi的替換命令: :ranges/pat1/pat2/g 其中 : 這是Vi的命令執(zhí)行界面。 range 是命令執(zhí)行范圍的指定,,可以使用百分號(hào)(%)表示所有行,,使用點(diǎn)(.)表示當(dāng)前行,使用美元符號(hào)($)表示最后一行,。你還可以使用行號(hào),,例如10,20表示第10到20行,.,$表示當(dāng)前行到最后一行,,.+2,$-5表示當(dāng)前行后兩行直到全文的倒數(shù)第五行,,等等。 s 表示其后是一個(gè)替換命令,。 pat1 這是要查找的一個(gè)正則表達(dá)式,,這篇文章中有一大堆例子。 pat2 這是希望把匹配串變成的模式的正則表達(dá)式,,這篇文章中有一大堆例子,。 g 可選標(biāo)志,帶這個(gè)標(biāo)志表示替換將針對(duì)行中每個(gè)匹配的串進(jìn)行,,否則則只替換行中第一個(gè)匹配串,。 常用的正則表達(dá)式主要有以下幾種:匹配中文字符的正則表達(dá)式: [\u4e00-\u9fa5] 評(píng)注:匹配中文還真是個(gè)頭疼的事,,有了這個(gè)表達(dá)式就好辦了哦 獲取日期正則表達(dá)式:\d{4}[年|\-|\.]\d{1,2}[月|\-|\.]\d{1,2}日? 評(píng)注:可用來(lái)匹配大多數(shù)年月日信息,。 匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff] 評(píng)注:可以用來(lái)計(jì)算字符串的長(zhǎng)度(一個(gè)雙字節(jié)字符長(zhǎng)度計(jì)2,ASCII字符計(jì)1) 匹配空白行的正則表達(dá)式:\n\s*\r 評(píng)注:可以用來(lái)刪除空白行 匹配HTML標(biāo)記的正則表達(dá)式:<(\S*?)[^>]*>.*?</>|<.*? /> 評(píng)注:網(wǎng)上流傳的版本太糟糕,,上面這個(gè)也僅僅能匹配部分,,對(duì)于復(fù)雜的嵌套標(biāo)記依舊無(wú)能為力 匹配首尾空白字符的正則表達(dá)式:^\s*|\s*$ 評(píng)注:可以用來(lái)刪除行首行尾的空白字符(包括空格、制表符,、換頁(yè)符等等),,非常有用的表達(dá)式 匹配Email地址的正則表達(dá)式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 評(píng)注:表單驗(yàn)證時(shí)很實(shí)用 匹配網(wǎng)址URL的正則表達(dá)式:[a-zA-z]+://[^\s]* 評(píng)注:網(wǎng)上流傳的版本功能很有限,上面這個(gè)基本可以滿足需求 匹配賬號(hào)是否合法(字母開(kāi)頭,,允許5-16字節(jié),,允許字母數(shù)字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 評(píng)注:表單驗(yàn)證時(shí)很實(shí)用 匹配國(guó)內(nèi)電話號(hào)碼:\d{4}-\d{7}|\d{3}-\d{8} 評(píng)注:匹配形式如 0511-4405222 或 021-87888822 匹配騰訊QQ號(hào):[1-9][0-9]\{4,\} 評(píng)注:騰訊QQ號(hào)從10000開(kāi)始 匹配中國(guó)郵政編碼:[1-9]\d(?!\d) 評(píng)注:中國(guó)郵政編碼為6位數(shù)字 匹配身份證:\d{17}[\d|X]|\d{15} 評(píng)注:中國(guó)的身份證為15位或18位 匹配ip地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。 評(píng)注:提取ip地址時(shí)有用 匹配特定數(shù)字: ^[1-9]\d*$ //匹配正整數(shù) ^-[1-9]\d*$ //匹配負(fù)整數(shù) ^-?[1-9]\d*$ //匹配整數(shù) ^[1-9]\d*|0$ //匹配非負(fù)整數(shù)(正整數(shù) + 0) ^-[1-9]\d*|0$ //匹配非正整數(shù)(負(fù)整數(shù) + 0) ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮點(diǎn)數(shù) ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配負(fù)浮點(diǎn)數(shù) ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮點(diǎn)數(shù) ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0) ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0) 評(píng)注:處理大量數(shù)據(jù)時(shí)有用,,具體應(yīng)用時(shí)注意修正 匹配特定字符串: ^[A-Za-z]+$ //匹配由26個(gè)英文字母組成的字符串 ^[A-Z]+$ //匹配由26個(gè)英文字母的大寫組成的字符串 ^[a-z]+$ //匹配由26個(gè)英文字母的小寫組成的字符串 ^[A-Za-z0-9]+$ //匹配由數(shù)字和26個(gè)英文字母組成的字符串 ^\w+$ //匹配由數(shù)字,、26個(gè)英文字母或者下劃線組成的字符串 評(píng)注:最基本也是最常用的一些表達(dá)式 Function IsRegu(Regu,s) '正則表達(dá)式校驗(yàn) 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 不同的語(yǔ)言(如PHP和JAVA),、相同語(yǔ)言的不同類庫(kù)(如來(lái)自Sun的Java Regular Expression類庫(kù)跟Apache Jakarta的正則表達(dá)式類庫(kù))間,,用法會(huì)有所差別,在使用的時(shí)候,,要注意這些差別,。 正則表達(dá)式類【1】 正則表達(dá)式應(yīng)用——替換指定內(nèi)容到行尾 【2】 正則表達(dá)式應(yīng)用——數(shù)字替換----------------------------Microshaoft@CCF,jiuk2k@CCF 【3】 正則表達(dá)式應(yīng)用——?jiǎng)h除每一行行尾的指定字符 【4】 正則表達(dá)式應(yīng)用——替換帶有半角括號(hào)的多行 【5】 正則表達(dá)式應(yīng)用——?jiǎng)h除空行----------------------------江德華 軟件技巧類 ------------------------------------------------------ 【6】 軟件技巧——鍵盤記錄的注意事項(xiàng) 【7】 軟件技巧——關(guān)閉文檔標(biāo)簽的便捷方法 【8】 軟件技巧——如何去掉 EditPlus 保存文本文件時(shí)的添加后綴提示,? 【9】 軟件技巧——提示找不到語(yǔ)法文件的解決辦法 【10】軟件技巧——設(shè)置editplus支持其它文字,,如韓文----------jackywu1978@LJF 【11】軟件技巧——FTP 上傳的設(shè)置----------------------------李應(yīng)文2.11漢化版 【12】軟件技巧——如何禁用備份文件功能? 【13】軟件技巧——添加語(yǔ)法文件,、自動(dòng)完成文件,、以及剪輯庫(kù)文件 工具集成類 ------------------------------------------------------ 【14】工具集成——編譯器集成例子(Java、Borland C++,、Visual C++,、Inno Setup、nsis,、C#) 【15】工具集成——讓Editplus調(diào)試PHP程序----------------------avenger,aukw@CCF 【16】工具集成——打造 PHP 調(diào)試環(huán)境(二)----------------------老七2.11漢化版 【17】在 WINPE 中集成 EDITPLUS 后續(xù)添加 ------------------------------------------------------ 【18】支持帶UTF-8標(biāo)記/不帶UTF-8標(biāo)記的文件 每個(gè)步驟都說(shuō)得很詳細(xì)了,,就沒(méi)有必要貼圖了,體積不要太大才好,。 【1】正則表達(dá)式應(yīng)用——替換指定內(nèi)容到行尾 原始文本如下面兩行 abc aaaaa 123 abc 444 希望每次遇到“abc”,,則替換“abc”以及其后到行尾的內(nèi)容為“abc efg” 即上面的文本最終替換為: abc efg 123 abc efg 解決: ① 在替換對(duì)話框,,查找內(nèi)容里輸入“abc.*” ?、?同時(shí)勾選“正則表達(dá)式”復(fù)選框,然后點(diǎn)擊“全部替換”按鈕 其中,,符號(hào)的含義如下: “.” =匹配任意字符 “*” =匹配0次或更多 注意:其實(shí)就是正則表達(dá)式替換,,這里只是把一些曾經(jīng)提出的問(wèn)題加以整理,單純從正則表達(dá)式本身來(lái)說(shuō),,就可以引申出成千上萬(wàn)種特例,。 【2】正則表達(dá)式應(yīng)用——數(shù)字替換 (Microshaoft@CCF,jiuk2k@CCF) 希望把 asdadas123asdasdas456asdasdasd789asdasd 替換為: asdadas[123]asdasdas[456]asdasdasd[789]asdasd 在替換對(duì)話框里面,勾選“正則表達(dá)式”復(fù)選框,; 在查找內(nèi)容里面輸入“[0-9][0-9][0-9]”,,不含引號(hào) “替換為:”里面輸入“[\0\1\2]”,不含引號(hào) 范圍為你所操作的范圍,,然后選擇替換即可,。 實(shí)際上這也是正則表達(dá)式的使用特例,“[0-9]”表示匹配0~9之間的任何特例,,同樣“[a-z]”就表示匹配a~z之間的任何特例 上面重復(fù)使用了“[0-9]”,,表示連續(xù)出現(xiàn)的三個(gè)數(shù)字 “\0”代表第一個(gè)“[0-9]”對(duì)應(yīng)的原型,,“\1”代表第二個(gè)“[0-9]”對(duì)應(yīng)的原型,依此類推 “[”,、“]”為單純的字符,,表示添加“[”或“]”,如果輸入“其它\0\1\2其它”,,則替換結(jié)果為: asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd 功能增強(qiáng)(by jiuk2k@CCF): 如果將查找內(nèi)容“[0-9][0-9][0-9]”改為“[0-9]*[0-9]”,,對(duì)應(yīng)1 或 123 或 12345 或 ... 大家根據(jù)需要定制 相關(guān)內(nèi)容還有很多,可以自己參考正則表達(dá)式的語(yǔ)法仔細(xì)研究一下 【3】正則表達(dá)式應(yīng)用——?jiǎng)h除每一行行尾的指定字符 因?yàn)檫@幾個(gè)字符在行中也是出現(xiàn)的,所以肯定不能用簡(jiǎn)單的替換實(shí)現(xiàn) 比如 12345 1265345 2345 需要?jiǎng)h除每行末尾的“345” 這個(gè)也算正則表達(dá)式的用法,,其實(shí)仔細(xì)看正則表達(dá)式應(yīng)該比較簡(jiǎn)單,,不過(guò)既然有這個(gè)問(wèn)題提出,說(shuō)明對(duì)正則表達(dá)式還得有個(gè)認(rèn)識(shí)過(guò)程,,解決方法如下 解決: 在替換對(duì)話框中,,啟用“正則表達(dá)式”復(fù)選框 在查找內(nèi)容里面輸入“345$” 這里“$”表示從行尾匹配 如果從行首匹配,可以用“^”來(lái)實(shí)現(xiàn),,不過(guò) EditPlus 有另一個(gè)功能可以很簡(jiǎn)單的刪除行首的字符串 a. 選擇要操作的行 b. 編輯-格式-刪除行注釋 c. 在彈出對(duì)話框里面輸入要清除的行首字符,,確定 【4】正則表達(dá)式應(yīng)用——替換帶有半角括號(hào)的多行 幾百個(gè)網(wǎng)頁(yè)中都有下面一段代碼: <script LANGUAGE="JavaScript1.1"> <!-- htmlAdWH('93163607', '728', '90'); //--> </SCRIPT> 我想把它們都去掉,可是找了很多search & replace的軟件,,都是只能對(duì)“一行”進(jìn)行操作,。 EditPlus 打開(kāi)幾百個(gè)網(wǎng)頁(yè)文件還是比較順暢的,所以完全可以勝任這個(gè)工作,。 具體解決方法,,在 Editplus 中使用正則表達(dá)式,由于“(”,、“)”被用做預(yù)設(shè)表達(dá)式(或者可以稱作子表達(dá)式)的標(biāo)志,,所以查找 “<script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH('93163607', '728', '90'.);\n//-->\n</SCRIPT>\n” 時(shí)會(huì)提示查找不到,所以也就無(wú)法進(jìn)行替換了,,這時(shí)可以把“(”,、“)”使用任意字符標(biāo)記替代,即半角句號(hào):“.”,。替換內(nèi)容為 <script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH.'93163607', '728', '90'.;\n//-->\n</SCRIPT>\n 在替換對(duì)話框啟用“正則表達(dá)式”選項(xiàng),,這時(shí)就可以完成替換了 補(bǔ)充:(lucida@DRL) 對(duì)( ) 這樣的特殊符號(hào),應(yīng)該用\( \)來(lái)表示,,這也是很標(biāo)準(zhǔn)的regexp語(yǔ)法,,可以寫為 <script LANGUAGE="JavaScript1.1">\n<!--\nhtmlAdWH\('93163607', '728', '90'\);\n//-->\n</SCRIPT>\n 【5】正則表達(dá)式應(yīng)用——?jiǎng)h除空行 啟動(dòng)EditPlus,打開(kāi)待處理的文本類型文件,。 ?、佟⑦x擇“查找”菜單的“替換”命令,彈出文本替換對(duì)話框,。選中“正則表達(dá)式”復(fù)選框,,表明我們要在查找、替換中使用正則表達(dá)式,。然后,,選中“替換范圍”中的“當(dāng)前文件”,表明對(duì)當(dāng)前文件操作,。 ?、?、單擊“查找內(nèi)容”組合框右側(cè)的按鈕,,出現(xiàn)下拉菜單。 ?、?、下面的操作添加正則表達(dá)式,該表達(dá)式代表待查找的空行,。(技巧提示:空行僅包括空格符,、制表符、回車符,,且必須以這三個(gè)符號(hào)之一作為一行的開(kāi)頭,,并且以回車符結(jié)尾,查找空行的關(guān)鍵是構(gòu)造代表空行的正則表達(dá)式),。 直接在"查找"中輸入正則表達(dá)式“^[ \t]*\n”,,注意\t前有空格符。 ?。?)選擇“從行首開(kāi)始匹配”,,“查找內(nèi)容”組合框中出現(xiàn)字符“^”,表示待查找字符串必須出現(xiàn)在文本中一行的行首,。 ?。?)選擇“字符在范圍中”,那么在“^”后會(huì)增加一對(duì)括號(hào)“[]”,,當(dāng)前插入點(diǎn)在括號(hào)中,。括號(hào)在正則表達(dá)式中表示,文本中的字符匹配括號(hào)中任意一個(gè)字符即符合查找條件,。 ?。?)按一下空格鍵,添加空格符,??崭穹强招械囊粋€(gè)組成成分。 (4)選擇“制表符”,,添加代表制表符的“\t”,。 (5)移動(dòng)光標(biāo),,將當(dāng)前插入點(diǎn)移到“]”之后,,然后選擇“匹配 0 次或更多”,該操作會(huì)添加星號(hào)字符“*”,。星號(hào)表示,,其前面的括號(hào)“[]”內(nèi)的空格符或制表符,在一行中出現(xiàn)0個(gè)或多個(gè),。 ?。?)選擇“換行符”,插入“\n”,,表示回車符,。 ④,、“替換為”組合框保持空,,表示刪除查找到的內(nèi)容。單擊“替換”按鈕逐個(gè)行刪除空行,,或單擊“全部替換”按鈕刪除全部空行(注意:EditPlus有時(shí)存在“全部替換”不能一次性完全刪除空行的問(wèn)題,,可能是程序BUG,需要多按幾次按鈕),。 【6】軟件技巧——鍵盤記錄的注意事項(xiàng) EditPlus 的鍵盤記錄有些類似于 UltraEdit 的宏操作,,不過(guò)功能相對(duì)單一,錄制的文件可編輯性較差,。 由于基本無(wú)法編輯錄制的文件,,所以錄制的時(shí)候?yàn)榱吮苊怃浿剖。扑]純粹使用鍵盤操作,,以下是比較關(guān)鍵的幾個(gè)鍵盤組合: Ctrl+F = 調(diào)出查找對(duì)話框 Ctrl+H = 調(diào)出替換對(duì)話框 Alt+F4 = 關(guān)閉作用,,比如,關(guān)閉查找對(duì)話框,、關(guān)閉替換對(duì)話框,,等等 其它鍵盤快捷鍵在“幫助-快捷鍵列表”里面可以很容易的查找到,這里就不細(xì)說(shuō)了,。 【7】軟件技巧——關(guān)閉文檔標(biāo)簽的便捷方法 右鍵單擊文檔標(biāo)簽工具條,,彈出菜單中選擇“標(biāo)簽選項(xiàng)”,選中“用鼠標(biāo)中間的按鈕關(guān)閉”,,這里包括鼠標(biāo)的滾輪,。 【8】軟件技巧——如何去掉 EditPlus 保存文本文件時(shí)的添加后綴提示? 如果你使用 EditPlus 進(jìn)行文本編輯,那么每次創(chuàng)建文本文件,,編輯后保存時(shí),,盡管文件類型下拉列表中顯示的是文本文件, EditPlus 還是詢問(wèn)你是否添加".txt"后綴,,是不是很煩,? 解決方法: ① 在程序目錄建立一個(gè)空的文件“template.txt” ?、?“工具-參數(shù)設(shè)置-模板”里面,,單擊“添加”按鈕添加模板,“菜單文本”這里輸入“Text”,,瀏覽“template.txt”,,之后確定即可 ③ “文件-新建-text”,,就可以建立一個(gè)空的文本文件,,保存時(shí),,這個(gè)文件自動(dòng)帶有擴(kuò)展名".txt",,也就避免了令人頭疼的確認(rèn) ④ 模板設(shè)置文件名稱為“template.ini”,,如果和主程序同一路徑,,可以使用相對(duì)路徑 羅嗦了點(diǎn),不過(guò)管用 要自動(dòng)創(chuàng)建帶有某種后綴的文件,,方法同上,。 【9】軟件技巧——提示找不到語(yǔ)法文件 *.stx 的解決辦法 原因多為設(shè)置的語(yǔ)法文件不存在或者是路徑設(shè)置不對(duì)。這是因?yàn)?EditPlus 的語(yǔ)法是設(shè)置文件采用的是絕對(duì)路徑,,而在你設(shè)置了語(yǔ)法文件之后,,再把程序復(fù)制到其它目錄,因而導(dǎo)致 EditPlus 無(wú)法找到該語(yǔ)法文件,。 解決辦法: 在主程序目錄里,,找到 Setting.ini 這是 EditPlus 存放語(yǔ)法的文件 查找后綴為“.stx”、“acp”的文本內(nèi)容,,或者查找?guī)в序?qū)動(dòng)器符號(hào)的行,,比如 Syntax file=C:\Program Files\EditPlus 2\cpp.stx 那么,就把”C:\Program Files\EditPlus 2\“替換成你當(dāng)前軟件的路徑,。 其它提示找不到文件的解決方法同上 【10】軟件技巧——設(shè)置editplus支持其它文字,,如韓文 在editplus里打開(kāi)文件,出來(lái)打開(kāi)文件對(duì)話框,;然后點(diǎn)擊“轉(zhuǎn)換器”后面的那個(gè)省略號(hào),,會(huì)出來(lái)自定義轉(zhuǎn)換器對(duì)話框;在右邊選擇你需要的編碼方式,添加到左邊,,然后點(diǎn)確定,;最后在下拉框中選擇需要的編碼方式,然后打開(kāi)文件即可,。 【11】軟件技巧——FTP 上傳的設(shè)置 “文件->遠(yuǎn)程操作->FTP 上傳”在“設(shè)置”選項(xiàng)卡中設(shè)置好參數(shù)(“子目錄”前面應(yīng)該加“/”如“/web/”),,點(diǎn)擊“確定”回到“FTP 上傳”選項(xiàng)卡,然后點(diǎn)擊“上傳”即可,;“批量上傳”的設(shè)置類似,。 【12】軟件技巧——如何禁用備份文件功能? 在“參數(shù)選擇”的文件選項(xiàng)頁(yè),,禁用“'保存時(shí)自動(dòng)創(chuàng)建備份文件”選項(xiàng) 【13】軟件技巧——添加語(yǔ)法文件,、自動(dòng)完成文件、以及剪輯庫(kù)文件 要添加 *.STX(語(yǔ)法文件)或 *.ACP(自動(dòng)完成文件): 1. 選擇“參數(shù)選擇→語(yǔ)法” 2. 單擊“添加”按鈕,,命名,,在“擴(kuò)展名”部分輸入對(duì)應(yīng)擴(kuò)展名(不帶“.”) 3. 瀏覽/輸入 STX(語(yǔ)法文件部分) 以及 ACP(自動(dòng)完成文件部分)。 添加剪輯庫(kù)文件(*.CTL) 復(fù)制相應(yīng) *.CTL 文件到軟件安裝目錄,,重新啟動(dòng) EditPlus ,,則系統(tǒng)自動(dòng)識(shí)別。 作者主頁(yè)有很多語(yǔ)法自動(dòng)完成文件下載,,地址 http:///files.html 【14】工具集成——編譯器集成例子(Java,、Borland C++、Visual C++,、Inno Setup,、nsis) 在“工具→參數(shù)選擇→用戶工具”選項(xiàng)頁(yè)設(shè)置,設(shè)置步驟 ?、?設(shè)置組名稱,,這里也可以不設(shè)置 ② 單擊“添加工具→應(yīng)用程序”按鈕并進(jìn)行如下設(shè)置 ?、?各種類似"$(FilePath)"的參數(shù)可以在文本框右側(cè)的箭頭下拉菜單中獲取,,具體含義如下 參數(shù) 描述 $(FilePath) 文件路徑(文件全名,含目錄和文件名) $(FileDir) 文件目錄(不帶文件名) $(FileName) 文件名(不帶目錄) $(FileNameNoExt) 不帶擴(kuò)展名的文件名(不帶目錄) $(FileExt) 擴(kuò)展名(當(dāng)前文件) $(ProjectName) 工程名稱(當(dāng)前工程名) $(CurLine) 當(dāng)前行號(hào)(光標(biāo)位置處的行號(hào)) $(CurCol) 當(dāng)前列號(hào)(光標(biāo)位置處的列號(hào)) $(CurSel) 當(dāng)前文本(插入當(dāng)前選定文本) $(CurWord) 當(dāng)前單詞(插入當(dāng)前單詞) $(WindowList) 顯示當(dāng)前窗口列表并選擇特定文件 例子 1. Java 編譯器 菜單文本:Java 編譯器 命令:c:\java\bin\javac.exe 參數(shù):"$(FilePath)" 初始目錄:$(FileDir) 捕獲輸出:開(kāi)啟 要運(yùn)行已編譯的 Java 類文件,,你可以進(jìn)行如下設(shè)置: 菜單文本:Java 命令:c:\java\bin\java.exe 參數(shù):$(FileNameNoExt) 初始目錄:$(FileDir) “命令”部分應(yīng)當(dāng)替換為實(shí)際的 Java 解釋器的路徑,。 例子 2. Borland C++ 菜單文本:Borland C 命令:c:\bc\bin\bcc32.exe 參數(shù):-Ic:\bc\include -Lc:\bc\lib -n$(FileDir) $(FilePath) 初始目錄:c:\bc\bin 捕獲輸出:開(kāi)啟 例子 3. Visual C++ 菜單文本:Visual C++ 命令:c:\msdev\vc98\bin\cl.exe 參數(shù):"$(FilePath)" 初始目錄:$(FileDir) 捕獲輸出:開(kāi)啟 例子 4. Inno Setup 菜單文本:編譯 Inno 命令:C:\Program Files\Inno Setup 4\Compil32.exe” 參數(shù):/cc $(FileName) 初始目錄:$(FileDir) 捕獲輸出:開(kāi)啟 例子 5. nsis 菜單文本:編譯 nsis 命令:C:\NSIS\makensis.exe 參數(shù):$(FileName) 初始目錄:$(FileDir) 捕獲輸出:開(kāi)啟 例子 6. C# 菜單文本:編譯 C# 命令:C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\csc.exe 參數(shù):$(FileName) 初始目錄:$(FileDir) 捕獲輸出:開(kāi)啟 在上面設(shè)置中,在命令部分,,必須使用系統(tǒng)中各自編譯器的絕對(duì)路徑,。 設(shè)置完畢后,你可以在“工具”菜單運(yùn)行對(duì)應(yīng)工具了,,運(yùn)行結(jié)果會(huì)顯示在底部的輸出窗口,,你也可以通過(guò)快捷鍵(Ctrl + 0-9) 運(yùn)行,,或者是通過(guò)“用戶工具欄”的快捷按鈕運(yùn)行。 要運(yùn)行已編譯的 *.exe 文件,,你可以進(jìn)行如下設(shè)置(此時(shí)可執(zhí)行文件需要和編譯文件同名): 菜單文本:Run 命令:$(FileNameNoExt) 參數(shù): 初始目錄:$(FileDir) 【15】工具集成—— 讓Editplus調(diào)試PHP程序 1:打開(kāi)Editplus,,選擇"工具->配置用戶工具..."菜單。 2:在彈出的窗口中選擇"添加工具->應(yīng)用程序",給新程序起一個(gè)好記的名字,,比如這里我們用"Debug PHP",在"菜單文本"中輸入"Debug PHP",。點(diǎn)擊"命令行"右邊的按鈕,找到你的php.exe所在的路徑,例如這里是"c:\php\php.exe",。再點(diǎn)擊"參數(shù)"右邊的下拉按鈕選擇"文件路徑",最后再把"捕獲輸出"前面的復(fù)選框選上,。 3:現(xiàn)在測(cè)試一下,新建一個(gè)php文件,,按快捷鍵Ctrl+1可以激活剛才我們?cè)O(shè)置的工具(如果你設(shè)置了多個(gè)工具,快捷鍵可能會(huì)有所不同),現(xiàn)在你可以看到它已經(jīng)能正常工作了,。但是還有一點(diǎn)不太理想:如果你的PHP程序出錯(cuò),在輸出窗口會(huì)提示你第幾行出錯(cuò) ,單擊這一行提示,Editplus老是提示你找不到某某文件,是否新建,。接下下我們要修正這個(gè)功能,。 4:打開(kāi)剛才用戶工具設(shè)置窗口,找到剛才設(shè)置的"Debug PHP"工具,。點(diǎn)擊"捕獲輸出"復(fù)選框旁邊的"輸出模式"按鈕,會(huì)彈出一個(gè)定義輸出模式的窗體,,把"使用默認(rèn)輸出模式"前面的復(fù)選框去掉, 在"正則表達(dá)式"這一項(xiàng)的文本框中輸入" ^.+ in (.+) line ([0-9]+) "(不包括引號(hào)),細(xì)心的朋友可能會(huì)發(fā)現(xiàn),這里使用的也正則表達(dá)式的語(yǔ)法,。然后,,在下面的"文件名"下拉菜單中選擇"預(yù)設(shè)表達(dá)式 1",,即上邊正則表達(dá)式中的第一個(gè)參數(shù),"行"下拉菜單項(xiàng)選擇"預(yù)設(shè)表達(dá)式 2",,"列"下拉項(xiàng)保持為空。然后保存設(shè)置,。 5:好了,,現(xiàn)在再來(lái)試一下吧,雙擊出錯(cuò)的行數(shù),,Editplus就會(huì)自動(dòng)激活出錯(cuò)文件,,并把光標(biāo)定位到出錯(cuò)行,是不是特別方便呢?! 現(xiàn)在,Editplus經(jīng)過(guò)我們的"改造",已經(jīng)可以即時(shí)的調(diào)試PHP文件了,雖然還不是"可視化"界面的,,但對(duì)于一些平常的小程序來(lái)查錯(cuò)還是非常好用的,。Editplus真是不款不可多得的好工具,如果你有什么使用技巧,,不要忘了大家一起分享哦,。^O^ 如果不能切換錯(cuò)誤行號(hào),請(qǐng)嘗試作如下修改: (by aukw@CCF) 1.php.ini 中html_errors = Off打開(kāi) //如果你不打開(kāi),,3.中的表達(dá)式要修改 2.參數(shù)改成:-q -f "$(FilePath)" //不加"符號(hào)的話文件名有空格的文件調(diào)試失敗,。,。 //-q不輸出html頭信息,你去掉也行,,不過(guò)調(diào)試時(shí)候你一般用不到那些header信息 3." ^.+ in (.+) line ([0-9]+) " 改成 "^.+ in (.+) on line ([0-9]+)$" //如果還是不行,,請(qǐng)注意調(diào)試結(jié)果,自己修改表達(dá)式來(lái)取出文件名和行號(hào) 【16】工具集成——打造 PHP 調(diào)試環(huán)境(二) 1: 把剪輯庫(kù)定位在 PHP4 Functions 上就可以在編輯時(shí), 利用[插入]->[匹配剪輯]命令,就可以自動(dòng)完成末輸入完整的 PHP 函數(shù)(或直接按 F2 鍵) 2: 類似上面,在選擇部分文字后,同樣可以自動(dòng)完成,。(同 F2) 3: 在[參數(shù)選擇]->[設(shè)置和語(yǔ)法]->PHP->自動(dòng)完成, 選擇目錄下的 php.acp 文件,你可以定制自己的自動(dòng)完成方式. 4: 想要即時(shí)預(yù)覽文件,可在[參數(shù)選擇]->[工具]->WEB 服務(wù)器中添加本地目錄,,(注意不要加 http:// , 應(yīng)是一個(gè)有效的站點(diǎn))。 如: 主機(jī)->localhost/php | 根目錄->D:\php 主機(jī)->localhost/asp | 根目錄->D:\asp 主機(jī)->localhost/cgi | 根目錄->D:\cgi 完成設(shè)置后只要腳本文件位于這些目錄下(子目錄也沒(méi)問(wèn)題), 就能夠正確解釋. 5: 各種語(yǔ)法和模板文件可以在 http:///files.html 獲得,,可根據(jù)需要選用和編輯,。 6: Ctrl+F11 可顯示當(dāng)前文件中的函數(shù)列表. 7: 添加各種用戶工具.如: 啟動(dòng)MYSQL服務(wù)器管理工具->C:\mysql\bin\winmysqladmin.exe 啟動(dòng)Apache服務(wù)器->C:\Apache\bin\Apache.exe -k start 啟動(dòng)Apache服務(wù)器->C:\Apache\bin\Apache.exe -k stop (shutdown) 8: DBG 附帶有一個(gè) prof_results.php 文件,可剖析 PHP 程序的性能. 雖不是真正的調(diào)試器,但已經(jīng)夠了. OK! 經(jīng)過(guò)改造后,是不是有點(diǎn)象一個(gè) IDE 什么?還差點(diǎn),沒(méi)有即時(shí)幫助...看我的,再來(lái): 9: 把 php_manual_en.chm (最好是擴(kuò)展幫助手冊(cè))加入到用戶工具中, 當(dāng)遇到需要參考的關(guān)鍵字時(shí), 把光標(biāo)定位其上, 按下快捷鍵 Ctrl+1, 看到了嗎. 在輸入時(shí)有想不起來(lái)的函數(shù)名時(shí), 先按照第 1 條的方法調(diào)出函數(shù), 然后...怎么樣? 以上有的是對(duì)于調(diào)試工具的設(shè)置,由于此類工具比較多,,大家設(shè)置時(shí)參考以上的基本就差不多了,,所以就不過(guò)多的列舉了。 【17】在 WINPE 中集成 EDITPLUS 可以基于目前的bartpe做得WINPE中,,菜單使用nu2menu制作 默認(rèn)位置為 \programs\editplus\ 默認(rèn)系統(tǒng)位置為光盤的 i386 目錄 i386/system32 的 autorun.bat 中添加外殼集成(系統(tǒng)右鍵) regedit /s %SystemDrive%\programs\editplus\REG.REG regsvr32 /s \programs\editplus\EPPSHELL.DLL ?。╮eg.reg保存了epp的工具欄信息,當(dāng)然注冊(cè)用戶也可以放置注冊(cè)信息) 復(fù)制editplus安裝包里面的文件到programs\editplus\,,注意,,如果有setting.ini,刪掉該文件,,在nu2menu里面加入以下句子(可以根據(jù)需要安排位于特定菜單條目下) <MITEM TYPE="ITEM" DISABLED="@Not(@FileExists(@GetProgramDrive()\Programs\EditPlus\editplus.exe))" CMD="RUN" FUNC="@GetProgramDrive()\Programs\EditPlus\editplus.exe">EditPlus 文本編輯</MITEM> 【18】支持帶UTF-8標(biāo)記/不帶UTF-8標(biāo)記的文件 Lei@DRL提出并測(cè)試 這里Byte Order Mark翻譯為標(biāo)記/文件頭/標(biāo)簽 參數(shù)選擇-文件-里面設(shè)置“支持不帶有UTF-8文件頭的UTF-8文件”,,我這里翻譯標(biāo)簽為UTF-8文件頭,如果復(fù)選該項(xiàng),,應(yīng)該是保存為不帶標(biāo)簽的Utf-8,,如果不復(fù)選,應(yīng)該是保存成帶有BOM的UTF-8,。 這樣就可以打開(kāi)帶簽名的UTF-8文件,,并且可以正常編輯,但是又不能打開(kāi)不帶簽名的了,,想要打開(kāi)不帶簽名的還需要改回來(lái)...不過(guò)雖然有點(diǎn)麻煩,,但是總算能用了 1.驗(yàn)證用戶名和密碼:("^[a-zA-Z]\w{5,15}$")正確格式:"[A-Z][a-z]_[0-9]"組成,并且第一個(gè)字必須為字母6~16位; 2.驗(yàn)證電話號(hào)碼:("^(\d{3.4}-)\d{7,8}$")正確格式:xxx/xxxx-xxxxxxx/xxxxxxxx,; 3.驗(yàn)證身份證號(hào)(15位或18位數(shù)字):("^\d{15}|\d{18}$"),; 4.驗(yàn)證Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"); 5.只能輸入由數(shù)字和26個(gè)英文字母組成的字符串:("^[A-Za-z0-9]+$") ; 6.整數(shù)或者小數(shù):^[0-9]+\.{0,1}[0-9]{0,2}$ 7.只能輸入數(shù)字:"^[0-9]*$",。 8.只能輸入n位的數(shù)字:"^\d{n}$",。 9.只能輸入至少n位的數(shù)字:"^\d{n,}$"。 10.只能輸入m~n位的數(shù)字:,。"^\d{m,n}$" 11.只能輸入零和非零開(kāi)頭的數(shù)字:"^(0|[1-9][0-9]*)$",。 12.只能輸入有兩位小數(shù)的正實(shí)數(shù):"^[0-9]+(.[0-9]{2})?$",。 13.只能輸入有1~3位小數(shù)的正實(shí)數(shù):"^[0-9]+(.[0-9]{1,3})?$"。 14.只能輸入非零的正整數(shù):"^\+?[1-9][0-9]*$",。 15.只能輸入非零的負(fù)整數(shù):"^\-[1-9][]0-9"*$,。 16.只能輸入長(zhǎng)度為3的字符:"^.{3}$"。 17.只能輸入由26個(gè)英文字母組成的字符串:"^[A-Za-z]+$",。 18.只能輸入由26個(gè)大寫英文字母組成的字符串:"^[A-Z]+$",。 19.只能輸入由26個(gè)小寫英文字母組成的字符串:"^[a-z]+$"。 20.驗(yàn)證是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+",。 21.只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$" 22.驗(yàn)證URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$",。 23.驗(yàn)證一年的12個(gè)月:"^(0?[1-9]|1[0-2])$"正確格式為:"01"~"09"和"1"~"12"。 24.驗(yàn)證一個(gè)月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正確格式為,;"01"~"09"和"1"~"31",。 .(小圓點(diǎn)) 匹配除換行符號(hào)外的任意字符 \w 匹配字母、數(shù)字,、下劃線和漢字 \s 匹配任意空白字符 \d 匹配數(shù)字 \b 匹配單詞的開(kāi)始或結(jié)束 ^ 匹配字符串的開(kāi)始,,或排除 $ 匹配字符串的結(jié)束 以上都是單個(gè)字符匹配 如果要求匹配元字符中的符號(hào),則需要加反斜杠,。例如\+表示匹配加號(hào) www.baidu.com和www\.baidu\.com * 重復(fù)零次或多次 + 重復(fù)一次或多次 ?。?br> 重復(fù)零次或一次 {n} 重復(fù)n次 {n,} 至少重復(fù)n次 {n,m} 重復(fù)n到m次 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} ^w{3}\..+\.\w+$ [] 表示匹配中括號(hào)中的任一字符 () 小括號(hào)內(nèi)的為一個(gè)整體 | 前后兩者任意匹配一種 \(?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}$ |
|