主頁(yè) > 知識(shí)庫(kù) > PHP和正則表達(dá)式教程集合之一第1/2頁(yè)

PHP和正則表達(dá)式教程集合之一第1/2頁(yè)

熱門(mén)標(biāo)簽:地圖標(biāo)注與公司業(yè)務(wù)關(guān)系 廣西智能外呼系統(tǒng)多少錢(qián) 福建微碼電話(huà)機(jī)器人 外呼系統(tǒng)api對(duì)接 大學(xué)校門(mén)地圖標(biāo)注 平?jīng)龈叩碌貓D標(biāo)注商戶(hù)要收費(fèi)嗎 銷(xiāo)售電銷(xiāo)機(jī)器人詐騙 提高電話(huà)機(jī)器人接通率 荊州智能電銷(xiāo)機(jī)器人
PHP和正則表達(dá)式
一個(gè)正則表達(dá)式是一個(gè)特定的格式化模式,可以用來(lái)找出一個(gè)字符串在另一個(gè)字符串中的使用情況。幾個(gè)編程語(yǔ)言,包括Visual Basic,Perl,JavaScript和PHP都支持正則表達(dá)式,希望在這篇入門(mén)指導(dǎo)的結(jié)束,Mitchell(作者自己)可以讓你在PHP程序中能應(yīng)用一些基本的正則表達(dá)式。正則表達(dá)式是在各種各樣的程序語(yǔ)言中突出的古怪特征中的一種,但是由于它們看起來(lái)是很難的一個(gè)概念,所以很多開(kāi)發(fā)者就把它們放到了角落里,忘記了它們的存在。
讓我們先來(lái)看看什么是正則表達(dá)式,為什么你要在PHP程序中用到它們。
什么是正則表達(dá)式?
你對(duì)從一個(gè)不錯(cuò)的老的基于控制的文本編輯器中分離出像BBEdit和notepad的程序,有什么看法呢??jī)蓚€(gè)都支持文本輸入,可以讓你保存文本到文件中,但是現(xiàn)在的文本編輯器也支持其它功能,包括查找–代替工具,這讓編輯一個(gè)文本文件相當(dāng)容易。
     正則表達(dá)式也是相似的,只是更好一些。正則表達(dá)式可以被認(rèn)為一個(gè)極其高級(jí)的查找-替換工具,讓我們從痛苦中擺脫出來(lái):不必再寫(xiě)定制的數(shù)據(jù)確認(rèn)例子來(lái)檢查電子郵件地址或者來(lái)確認(rèn)電話(huà)號(hào)碼的格式是正確的,如此等等。
     任何程序中最普通的函數(shù)之一就是數(shù)據(jù)有效性檢查,PHP捆綁了一些文本檢查函數(shù),允許我們用正則表達(dá)式匹配一個(gè)字符串,確認(rèn)有一個(gè)空格,有一個(gè)問(wèn)號(hào),等等。
     你不知道的可能是,正則表達(dá)式可以簡(jiǎn)單裝備嗎,當(dāng)你掌握了一些正則表達(dá)式時(shí)(這個(gè)正則表達(dá)式可以用來(lái)告訴正則表達(dá)式引擎一個(gè)字符串中我們想要匹配的部分),你會(huì)自問(wèn)為什么會(huì)把正則表達(dá)式扔到角落里這么久,^_^。
     PHP有兩套函數(shù),用來(lái)處理兩種類(lèi)型的正則表達(dá)式:Perl5兼容模式,和Posix標(biāo)準(zhǔn)兼容模式。在這篇文章中我們將看看ereg函數(shù),用遵照Posix標(biāo)準(zhǔn)的搜索表達(dá)式工作。雖然它們并沒(méi)有Perl5模式那樣強(qiáng)大,但是一種不錯(cuò)的學(xué)習(xí)正則表達(dá)式的方法。如果你對(duì)PHP支持的Perl5兼容正則表達(dá)式感興趣,可以到PHP.net網(wǎng)站找一些關(guān)于preg函數(shù)的細(xì)節(jié)。
     PHP有六個(gè)函數(shù)來(lái)處理正則表達(dá)式,它們都把一個(gè)正則表達(dá)式作為它們的第一個(gè)參數(shù),列出如下:
ereg: 最常用的正則表達(dá)式函數(shù), ereg 允許我們搜索跟一個(gè)正則表達(dá)式匹配的一個(gè)字符串. 
ereg_replace: 允許我們搜索跟正則表達(dá)式匹配的一個(gè)字符串,并用新的字符串代替所有這個(gè)表達(dá)式出現(xiàn)的地方。 
eregi: 和ereg幾乎是一樣效果,不過(guò)忽略大小寫(xiě)。 
eregi_replace: 和ereg_replace有著一樣的搜索-替換功能,不過(guò)忽略大小寫(xiě). 
split: 允許我們搜索和正則表達(dá)式匹配的字符串,并且以字符串集合的方式返回匹配結(jié)果. 
spliti: split函數(shù)忽略大小寫(xiě)的版本.
為什么使用正則表達(dá)式? 
       如果你不斷地建立不同的函數(shù)來(lái)檢查或者操作字符串的一部分,現(xiàn)在你可能要放棄所有的這些函數(shù),取而代之的用正則表達(dá)式。如果你對(duì)下列的問(wèn)題都答“是的”,那么你肯定要考慮使用正則表達(dá)式了:
你是否正在寫(xiě)一些定制的函數(shù)來(lái)檢查表單數(shù)據(jù)(比如在電子信箱地址中的一個(gè)@,一個(gè)點(diǎn))? 
你是否寫(xiě)一些定制的函數(shù),在一個(gè)字符串中循環(huán)每個(gè)字符,如果這個(gè)字符匹配了一個(gè)特定特征(比如它是大寫(xiě)的,或者它是一個(gè)空格),那么就替換它?
      除了是令人不舒服的字符串檢查和操作方法,如果沒(méi)有有效率地寫(xiě)代碼,上述的兩條也會(huì)使你的程序慢下來(lái)。你是否更傾向于用下面的代碼檢查一個(gè)電子信箱地址呢:
?php
function validateEmail($email) 

      $hasAtSymbol = strpos($email, "@"); 
      $hasDot = strpos($email, ".");
      if($hasAtSymbol  $hasDot) 
         return true; 
      else 
         return false; 
}
echo validateEmail("mitchell@devarticles.com");
?> 
... 
或者使用下面的代碼:
?php
function validateEmail($email) 

    return ereg("^[a-zA-Z]+@[a-zA-Z]+.[a-zA-Z]+$", $email); 
}
echo validateEmail("mitchell@devarticles.com");
?> 
可以肯定的是,第一個(gè)函數(shù)比較容易,而且看起來(lái)結(jié)構(gòu)也不錯(cuò)。但是如果我們用上面的下一個(gè)版本的email地址檢查函數(shù)不是更容易嗎?
    上面展示的第二個(gè)函數(shù)只用了正則表達(dá)式,包括了對(duì)ereg函數(shù)的一個(gè)調(diào)用。Ereg 函數(shù)返回true或者false,來(lái)聲明它的字符串參數(shù)是否和正則表達(dá)式相匹配。
很多編程者避開(kāi)正則表達(dá)式,只因?yàn)樗鼈儯ㄔ谝恍┣闆r下)比其它的文本處理方法更慢。正則表達(dá)式可能慢的原因是因?yàn)樗鼈兩婕鞍炎址趦?nèi)存中拷貝和粘貼,因?yàn)檎齽t表達(dá)式的每一個(gè)新的部分都對(duì)應(yīng)匹配一個(gè)字符串。但是,從我對(duì)正則表達(dá)式的經(jīng)驗(yàn)來(lái)說(shuō),除非你在文本中幾百個(gè)行運(yùn)行一個(gè)復(fù)雜的正則表達(dá)式,否則性能上的缺陷都可以忽略不計(jì),當(dāng)把正則表達(dá)式作為輸入數(shù)據(jù)檢查工具時(shí),也很少出現(xiàn)這種情況。
正則表達(dá)式語(yǔ)法
在你可以匹配一個(gè)字符串到正則表達(dá)式之前,你必須先建立正則表達(dá)式。開(kāi)始的時(shí)候,正則表達(dá)式的語(yǔ)法有點(diǎn)古怪,表達(dá)式中的每一個(gè)短語(yǔ)代表某個(gè)類(lèi)型的搜索特征。下列是一些最普通的正則表達(dá)式,也都對(duì)應(yīng)著一個(gè)如何使用它的例子:
字符串頭部
搜索一個(gè)字符串的頭部,用^,例如
?php echo ereg("^hello", "hello world!"); ?> 
將返回 true, 但是
?php echo ereg("^hello", "i say hello world"); ?> 
將返回 false, 因?yàn)閔ello不在字符串”I say hello world”的頭部。
字符串尾部 
搜索字符串尾部,用$,例如:
?php echo ereg("bye$", "goodbye"); ?> 
將返回true, 但是
?php echo ereg("bye$", "goodbye my friend"); ?> 
將返回 false,因?yàn)閎ye不在字符串”goodbye my friend”的尾部.
任意的單個(gè)字符 
搜索任意字符,用點(diǎn)(.),例如:
?php echo ereg(".", "cat"); ?> 
將返回true,但是
?php echo ereg(".", ""); ?> 
將返回false,因?yàn)槲覀兊囊阉髯址疀](méi)有包含字符。你可以用花括號(hào)隨意告訴正則表達(dá)式引擎它要匹配多少個(gè)單個(gè)字符。如果我只想匹配5個(gè)字符,我可以這樣用ereg:
?php echo ereg(".{5}$", "12345"); ?> 
上面的這段代碼告訴正則表達(dá)式引擎當(dāng)且僅當(dāng)至少5個(gè)連續(xù)的字符出現(xiàn)字符串的尾部時(shí)返回true.我們也可以限制連續(xù)出現(xiàn)的字符的數(shù)目:
?php echo ereg("a{1,3}$", "aaa"); ?> 
在上面的例子里,我們已經(jīng)告訴正則表達(dá)式引擎,我們的搜索字符串來(lái)匹配表達(dá)式,它在尾部必須有介于1和3個(gè)的”a”字符。
?php echo ereg("a{1,3}$", "aaab"); ?> 
上面的例子將不會(huì)返回true,雖然有三個(gè)”a”字符在搜索字符串里,但是它們不是在字符串的尾部。如果我們把結(jié)尾字符串匹配$從正則表達(dá)式中去掉,那么這個(gè)字符串是匹配的。
我們也可以告訴正則表達(dá)式引擎來(lái)匹配至少有確定數(shù)目的字符在一行,如果它們存在的,可以匹配更多。 我們可以這樣做:
?php echo ereg("a{3,}$", "aaaa"); ?> 
零或多次重復(fù)字符
為了告訴正則表達(dá)式引擎一個(gè)字符可能存在,也可以重復(fù),我們用*字符。這里的兩個(gè)例子都將返回true.
?php echo ereg("t*", "tom"); ?> 
?php echo ereg("t*", "fom"); ?> 
即使第二個(gè)例子不包含”t”這個(gè)字符,但仍舊返回ture,因?yàn)?表示字符可以出現(xiàn),但不是必須出現(xiàn)。事實(shí)上,任何普通的字符串模式都會(huì)使上面的ereg調(diào)用返回true,因?yàn)?t'字符是可選的.
一或多次重復(fù)字符
為了告訴正則表達(dá)式引擎一個(gè)字符必須存在,也可以重復(fù)不止一次,我們用+字符,像
?php echo ereg("z+", "i like the zoo"); ?> 
下面的例子也會(huì)返回true:
?php echo ereg("z+", "i like the zzzzzzoo!"); ?> 
零或一次重復(fù)字符 
我們也可以告訴正則表達(dá)式引擎,一個(gè)字符必須是或者只存在一次,或者沒(méi)有。我們用?字符來(lái)做這項(xiàng)工作,就像
?php echo ereg("c?", "cats are fuzzy"); ?> 
如果我們?cè)敢?,我們完全可以從上面的搜索字符串中刪除'c',這個(gè)表達(dá)式會(huì)仍舊返回true.'?' 的意思是一個(gè)'c'可以出現(xiàn)在搜索字符串的任何地方,但不是必須的。
正則表達(dá)式語(yǔ)法 (續(xù)) 
空格字符 
為了匹配一個(gè)搜索字符串中的空格字符,我們用預(yù)定義Posix的類(lèi),[[:space]].方括號(hào)標(biāo)明連續(xù)字符的相關(guān)性,”:space:”是實(shí)際要匹配的類(lèi)(在這種情形下,是任何空白字符)??瞻装╰ab字符,新行字符,空白字符。或者,如果搜索字符串必須包含只有一個(gè)空格,而不是一個(gè)tab或者新行字符,你可以用一個(gè)空格字符(" ")。在大多數(shù)情況下,我傾向于使用":space:",因?yàn)檫@意味著我的意圖不僅僅是單個(gè)空格字符,這點(diǎn)很容易被忽視。這里有一些Posix-標(biāo)準(zhǔn)預(yù)定義類(lèi),
有一些我們可以作為正則表達(dá)式的部分的一些Posix-標(biāo)準(zhǔn)預(yù)定義類(lèi),包括[:alnum:], [:digit:], [:lower:]等等。 完整的列表可以在這里查看
我們可以像這樣匹配單個(gè)空白字符:
?php echo ereg("Mitchell[[:space:]]Harper", "Mitchell Harper"); ?> 
我們也可以通過(guò)在表達(dá)式后用?字符來(lái)告訴正則表達(dá)式引擎匹配沒(méi)有空白或者一個(gè)空白。
?php echo ereg("Mitchell[[:space:]]?Harper", "MitchellHarper"); ?> 
模式分組
相關(guān)的模式可以在方括號(hào)里分在一起。很容易用[a-z]和[A-Z]指定只有一個(gè)小寫(xiě)字母或者一列大寫(xiě)字母以搜索字符串的一部分存在。
?php
// 要求從第一個(gè)到最后一個(gè)都是小寫(xiě)字母 
echo ereg("^[a-z]+$", "johndoe"); // 返回true
?> 
或者像
?php
// 要求從第一個(gè)到最后一個(gè)都是大寫(xiě)字母
ereg("^[A-Z]+$", "JOHNDOE"); // 返回 true?
?> 
我們也可以告訴正則表達(dá)式引擎,我們希望或者是小寫(xiě)字母,或者是大寫(xiě)字母。我們只要把[a-z]和[A-Z]模式結(jié)合在一起就可以做到。
?php echo ereg("^[a-zA-Z]+$", "JohnDoe"); ?> 
在上面的例子里,如果我們能匹配"John Doe",而不是"JohnDoe",將是非常有意義的。我們用下面的正則表達(dá)式來(lái)做這個(gè):
^[a-zA-Z]+[[:space:]]{1}[a-zA-Z]+$ 
很容易搜索一個(gè)數(shù)字字符串
?php echo ereg("^[0-9]+$", "12345"); ?> 
詞語(yǔ)分組 
不僅僅搜索模式可以分組,我們也可以用圓括號(hào)把相關(guān)的搜索詞語(yǔ)進(jìn)行分組。
?php echo ereg("^(John|Jane).+$", "John Doe"); ?> 
在上面的例子中,我們有一個(gè)字符串頭部字符,緊跟著"John"或者"Jane",至少有一個(gè)其它字符,然后一個(gè)字符串尾部字符。所以…
?php echo ereg("^(John|Jane).+$", "Jane Doe"); ?> 
...將也匹配我們的搜索模式
特殊字符的情形
因?yàn)橐恍┳址迷谝粋€(gè)搜索模式的明確分組或者語(yǔ)法上,像在(John|Jane)中的圓括號(hào),我們需要告訴正則表達(dá)式引擎來(lái)屏蔽這些字符,加工它們使之成為被搜索字符串的一部分,而不是搜索表達(dá)式的一部分。我們所用的方法稱(chēng)為“字符轉(zhuǎn)義”,涉及到將任何“專(zhuān)用符號(hào)”加上反斜杠。所以,例如,如果我想在我的搜索中包含'|',那么我就可以這樣做
?php echo ereg("^[a-zA-z]+|[a-zA-z]+$", "John|Jane"); ?> 
這里只是少量的一些你要轉(zhuǎn)義的字符,你必須轉(zhuǎn)義^, $, (, ), ., [, |, *, ?, +,  and { 。
希望你現(xiàn)在對(duì)正則表達(dá)式實(shí)際上有多么強(qiáng)大有了一點(diǎn)點(diǎn)感覺(jué)了?,F(xiàn)在讓我們看兩個(gè)用正則表達(dá)式來(lái)檢查數(shù)據(jù)中一個(gè)字符串的例子。
正則表達(dá)式例子
例子1 
讓我們把第一個(gè)例子做的相當(dāng)簡(jiǎn)單,檢驗(yàn)一個(gè)標(biāo)準(zhǔn)的URL.一個(gè)標(biāo)準(zhǔn)的URL(沒(méi)有端口號(hào)),有三個(gè)部分構(gòu)成:
[協(xié)議]://[域名]
讓我們從匹配URL的協(xié)議部分開(kāi)始,并且讓它只能用http或者ftp.我們可以用下面的正則表達(dá)式做到這點(diǎn):
^(http|ftp)
^字符特指字符串的頭部,利用圓括號(hào)把http和ftp圍住,且用“或者”符號(hào)(|)將它們分開(kāi),我們告訴正則表達(dá)式引擎http和ftp兩者之一必須在字符串的開(kāi)頭。
一個(gè)域名通常由www.somesite.com構(gòu)成,但是可以隨意選擇要不要www部分。為了例子簡(jiǎn)單,我們只允許.com,.net,和.org的域名是在考慮之中的。我們最好這樣對(duì)正則表達(dá)式中的域名部分表示如下:
(www.)?.+.(com|net|org)$ 
把所有的東西放在一起,我們的正則表達(dá)式就可以用作檢查一個(gè)域名,如:
?php
function isValidDomain($domainName) 

return ereg("^(http|ftp)://(www.)?.+.(com|net|org)$", $domainName); 
}
//真(true) 
echo isValidDomain("http://www.somesite.com");
//真(true)
echo isValidDomain("ftp://somesite.com");
//假 (false)
echo isValidDomain("ftp://www.somesite.fr");
//假 (false) 
echo isValidDomain("www.somesite.com");
?> 
例子二 
因?yàn)槲揖幼≡诎拇罄麃喯つ?,讓我們檢查一個(gè)典型的澳大利亞國(guó)際電話(huà)號(hào)碼。澳大利亞國(guó)際電話(huà)號(hào)碼的格式如下:
+61x xxxx-xxxx
第一個(gè)x是區(qū)號(hào),其它的都是電話(huà)號(hào)碼。檢查以'+61'開(kāi)頭且緊跟一個(gè)在2到9之間的區(qū)號(hào)的電話(huà)號(hào)碼,我們用下面的正則表達(dá)式:
^+61[2-9][[:space:]] 
注意,上面的搜索模式把'+'字符用''轉(zhuǎn)義,以便于可以在搜索中包含,不至于被解釋為一個(gè)正則表達(dá)式。[2-9]告訴正則表達(dá)式引擎我們需要包含一個(gè)2到9之間的數(shù)字。[[:space:]]類(lèi)則告訴正則表達(dá)式期望在這里有一個(gè)空白。
這里是電話(huà)號(hào)碼剩下的搜索模式:
[0-9]{4}-[0-9]{4}$ 
這里沒(méi)有什么不尋常的地方,我們只是告訴正則表達(dá)式引擎電話(huà)號(hào)碼可用的數(shù)字,它必須是4個(gè)數(shù)字的組合,跟著一個(gè)連接符,再跟著另一個(gè)4個(gè)數(shù)字的組合,然后一個(gè)字符串尾部字符。
把完整的正則表達(dá)式放在一起,放進(jìn)一個(gè)函數(shù),我們可以用代碼來(lái)檢查一些澳大利亞國(guó)際電話(huà)號(hào)碼:
?php
function isValidPhone($phoneNum) 

echo ereg("^+61[2-9][[:space:]][0-9]{4}-[0-9]{4}$", $phoneNum); 
}
// 真(true) 
echo isValidPhone("+619 0000-0000");
// 假(false) 
echo isValidPhone("+61 00000000");
//假( false) 
echo isValidPhone("+611 00000000");
?> 
總結(jié)
正則表達(dá)式用一些不適合書(shū)寫(xiě)和重復(fù)的代碼來(lái)檢查一個(gè)字符串。在最后的幾頁(yè)里,我們已經(jīng)講解了所有的Posix標(biāo)準(zhǔn)正則表達(dá)式的基礎(chǔ),包括字符,分組和PHP ereg函數(shù)。我們也知道了怎么用正則表達(dá)式來(lái)檢查一些PHP中簡(jiǎn)單的字符串。
譯者注釋?zhuān)罕救擞⑽牟辉趺春?,可能一些地方有出入。本文中的字符?lèi)其實(shí)是我們所說(shuō)的字符簇
經(jīng)典正則表達(dá)式
正則表達(dá)式用于字符串處理,表單驗(yàn)證等場(chǎng)合,實(shí)用高效,但用到時(shí)總是不太把握,以致往往要上網(wǎng)查一番。我將一些常用的表達(dá)式收藏在這里,作備忘之用。本貼隨時(shí)會(huì)更新。
匹配中文字符的正則表達(dá)式: [u4e00-u9fa5]
匹配雙字節(jié)字符(包括漢字在內(nèi)):[^x00-xff]
應(yīng)用:計(jì)算字符串的長(zhǎng)度(一個(gè)雙字節(jié)字符長(zhǎng)度計(jì)2,ASCII字符計(jì)1)
String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}
匹配空行的正則表達(dá)式:n[s| ]*r
匹配HTML標(biāo)記的正則表達(dá)式:/(.*)>.*/1>|(.*) />/ 
匹配首尾空格的正則表達(dá)式:(^s*)|(s*$)
應(yīng)用:javascript中沒(méi)有像vbscript那樣的trim函數(shù),我們就可以利用這個(gè)表達(dá)式來(lái)實(shí)現(xiàn),如下:
String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, "");
}
利用正則表達(dá)式分解和轉(zhuǎn)換IP地址:
下面是利用正則表達(dá)式匹配IP地址,并將IP地址轉(zhuǎn)換成對(duì)應(yīng)數(shù)值的Javascript程序:
function IP2V(ip)
{
re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正則表達(dá)式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}
不過(guò)上面的程序如果不用正則表達(dá)式,而直接用split函數(shù)來(lái)分解可能更簡(jiǎn)單,程序如下:
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匹配Email地址的正則表達(dá)式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配網(wǎng)址URL的正則表達(dá)式:http://([w-]+.)+[w-]+(/[w- ./?%=]*)?
利用正則表達(dá)式去除字串中重復(fù)的字符的算法程序:
var s="abacabefgeeii"
var s1=s.replace(/(.).*1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"") 
alert(s1+s2) //結(jié)果為:abcefgi
我原來(lái)在CSDN上發(fā)貼尋求一個(gè)表達(dá)式來(lái)實(shí)現(xiàn)去除重復(fù)字符的方法,最終沒(méi)有找到,這是我能想到的最簡(jiǎn)單的實(shí)現(xiàn)方法。思路是使用后向引用取出包括重復(fù)的字符,再以重復(fù)的字符建立第二個(gè)表達(dá)式,取到不重復(fù)的字符,兩者串連。這個(gè)方法對(duì)于字符順序有要求的字符串可能不適用。
得用正則表達(dá)式從URL地址中提取文件名的javascript程序,如下結(jié)果為page1
s="http://www.9499.net/page1.htm"
s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2")
alert(s)
利用正則表達(dá)式限制網(wǎng)頁(yè)表單里的文本框輸入內(nèi)容:
用正則表達(dá)式限制只能輸入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
用正則表達(dá)式限制只能輸入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
用正則表達(dá)式限制只能輸入數(shù)字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
用正則表達(dá)式限制只能輸入數(shù)字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
如何用正則表達(dá)式來(lái)表示中文
由于中文的ASCII碼是有一定的范圍的。所以你可以用下面的正則表達(dá)式來(lái)表示中文。
/^[chr(0xa1)-chr(0xff)]+$/
下面是一個(gè)使用的例子:
$str = "超越PHP";
if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
echo "這是一個(gè)純中文字符串";
} else {
echo "這不是一個(gè)純中文字串";
}
正則表達(dá)式
如果原來(lái)沒(méi)有使用過(guò)正則表達(dá)式,那么可能對(duì)這個(gè)術(shù)語(yǔ)和概念會(huì)不太熟悉。不過(guò),它們并不是您想象的那么新奇。
請(qǐng)回想一下在硬盤(pán)上是如何查找文件的。您肯定會(huì)使用 ? 和 * 字符來(lái)幫助查找您正尋找的文件。? 字符匹配文件名中的單個(gè)字符,而 * 則匹配一個(gè)或多個(gè)字符。一個(gè)如 'data?.dat' 的模式可以找到下述文件:
data1.dat
data2.dat
datax.dat
dataN.dat
如果使用 * 字符代替 ? 字符,則將擴(kuò)大找到的文件數(shù)量。'data*.dat' 可以匹配下述所有文件名:
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
盡管這種搜索文件的方法肯定很有用,但也十分有限。? 和 * 通配符的有限能力可以使你對(duì)正則表達(dá)式能做什么有一個(gè)概念,不過(guò)正則表達(dá)式的功能更強(qiáng)大,也更靈活。
--------------------------------------------------------------------------------
2
早期起源
正則表達(dá)式的“祖先”可以一直上溯至對(duì)人類(lèi)神經(jīng)系統(tǒng)如何工作的早期研究。Warren McCulloch 和 Walter Pitts 這兩位神經(jīng)生理學(xué)家研究出一種數(shù)學(xué)方式來(lái)描述這些神經(jīng)網(wǎng)絡(luò)。
1956 年, 一位叫 Stephen Kleene 的美國(guó)數(shù)學(xué)家在 McCulloch 和 Pitts 早期工作的基礎(chǔ)上,發(fā)表了一篇標(biāo)題為“神經(jīng)網(wǎng)事件的表示法”的論文,引入了正則表達(dá)式的概念。正則表達(dá)式就是用來(lái)描述他稱(chēng)為“正則集的代數(shù)”的表達(dá)式,因此采用“正則表達(dá)式”這個(gè)術(shù)語(yǔ)。 
隨后,發(fā)現(xiàn)可以將這一工作應(yīng)用于使用Ken Thompson 的計(jì)算搜索算法的一些早期研究,Ken Thompson是Unix 的主要發(fā)明人。正則表達(dá)式的第一個(gè)實(shí)用應(yīng)用程序就是 Unix 中的qed 編輯器。
如他們所說(shuō),剩下的就是眾所周知的歷史了。從那時(shí)起直至現(xiàn)在正則表達(dá)式都是基于文本的編輯器和搜索工具中的一個(gè)重要部分。
--------------------------------------------------------------------------------
3.
使用正則表達(dá)式
在典型的搜索和替換操作中,必須提供要查找的確切文字。這種技術(shù)對(duì)于靜態(tài)文本中的簡(jiǎn)單搜索和替換任務(wù)可能足夠了,但是由于它缺乏靈活性,因此在搜索動(dòng)態(tài)文本時(shí)就有困難了,甚至是不可能的。 
使用正則表達(dá)式,就可以: 
測(cè)試字符串的某個(gè)模式。例如,可以對(duì)一個(gè)輸入字符串進(jìn)行測(cè)試,看在該字符串是否存在一個(gè)電話(huà)號(hào)碼模式或一個(gè)信用卡號(hào)碼模式。這稱(chēng)為數(shù)據(jù)有效性驗(yàn)證。 
替換文本。可以在文檔中使用一個(gè)正則表達(dá)式來(lái)標(biāo)識(shí)特定文字,然后可以全部將其刪除,或者替換為別的文字。 
根據(jù)模式匹配從字符串中提取一個(gè)子字符串。可以用來(lái)在文本或輸入字段中查找特定文字。 
例如,如果需要搜索整個(gè) web 站點(diǎn)來(lái)刪除某些過(guò)時(shí)的材料并替換某些HTML 格式化標(biāo)記,則可以使用正則表達(dá)式對(duì)每個(gè)文件進(jìn)行測(cè)試,看在該文件中是否存在所要查找的材料或 HTML 格式化標(biāo)記。用這個(gè)方法,就可以將受影響的文件范圍縮小到包含要?jiǎng)h除或更改的材料的那些文件。然后可以使用正則表達(dá)式來(lái)刪除過(guò)時(shí)的材料,最后,可以再次使用正則表達(dá)式來(lái)查找并替換那些需要替換的標(biāo)記。
另一個(gè)說(shuō)明正則表達(dá)式非常有用的示例是一種其字符串處理能力還不為人所知的語(yǔ)言。VBScript 是 Visual Basic 的一個(gè)子集,具有豐富的字符串處理功能。與 C 類(lèi)似的 Visual Basic Scripting Edition 則沒(méi)有這一能力。正則表達(dá)式給 Visual Basic Scripting Edition 的字符串處理能力帶來(lái)了明顯改善。不過(guò),可能還是在 VBScript 中使用正則表達(dá)式的效率更高,它允許在單個(gè)表達(dá)式中執(zhí)行多個(gè)字符串操作。
--------------------------------------------------------------------------------
正則表達(dá)式語(yǔ)法
一個(gè)正則表達(dá)式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱(chēng)為元字符)組成的文字模式。該模式描述在查找文字主體時(shí)待匹配的一個(gè)或多個(gè)字符串。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與所搜索的字符串進(jìn)行匹配。
這里有一些可能會(huì)遇到的正則表達(dá)式示例:
Visual Basic Scripting Edition VBScript 匹配 
/^[ t]*$/ "^[ t]*$" 匹配一個(gè)空白行。 
/d{2}-d{5}/ "d{2}-d{5}" 驗(yàn)證一個(gè)ID 號(hào)碼是否由一個(gè)2位數(shù)字,一個(gè)連字符以及一個(gè)5位數(shù)字組成。 
/(.*)>.*/1>/ "(.*)>.*/1>" 匹配一個(gè) HTML 標(biāo)記。 
下表是元字符及其在正則表達(dá)式上下文中的行為的一個(gè)完整列表:
字符 描述 
將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符、或一個(gè) 后向引用、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如,'n' 匹配字符 "n"。'n' 匹配一個(gè)換行符。序列 '' 匹配 "" 而 "(" 則匹配 "("。 
^ 匹配輸入字符串的開(kāi)始位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 也匹配 'n' 或 'r' 之后的位置。 
$ 匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp 對(duì)象的 Multiline 屬性,$ 也匹配 'n' 或 'r' 之前的位置。 
* 匹配前面的子表達(dá)式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等價(jià)于{0,}。 
+ 匹配前面的子表達(dá)式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價(jià)于 {1,}。 
? 匹配前面的子表達(dá)式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價(jià)于 {0,1}。 
{n} n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o。 
{n,} n 是一個(gè)非負(fù)整數(shù)。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'。 
{n,m} m 和 n 均為非負(fù)整數(shù),其中n = m。最少匹配 n 次且最多匹配 m 次。劉, "o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。 
? 當(dāng)該字符緊跟在任何一個(gè)其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時(shí),匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對(duì)于字符串 "oooo",'o+?' 將匹配單個(gè) "o",而 'o+' 將匹配所有 'o'。 
. 匹配除 "n" 之外的任何單個(gè)字符。要匹配包括 'n' 在內(nèi)的任何字符,請(qǐng)使用象 '[.n]' 的模式。 
(pattern) 匹配pattern 并獲取這一匹配。所獲取的匹配可以從產(chǎn)生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在Visual Basic Scripting Edition 中則使用 $0…$9 屬性。要匹配圓括號(hào)字符,請(qǐng)使用 '(' 或 ')'。 
(?:pattern) 匹配 pattern 但不獲取匹配結(jié)果,也就是說(shuō)這是一個(gè)非獲取匹配,不進(jìn)行存儲(chǔ)供以后使用。這在使用 "或" 字符 (|) 來(lái)組合一個(gè)模式的各個(gè)部分是很有用。例如, 'industr(?:y|ies) 就是一個(gè)比 'industry|industries' 更簡(jiǎn)略的表達(dá)式。 
(?=pattern) 正向預(yù)查,在任何匹配 pattern 的字符串開(kāi)始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預(yù)查不消耗字符,也就是說(shuō),在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開(kāi)始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開(kāi)始。 
(?!pattern) 負(fù)向預(yù)查,在任何不匹配N(xiāo)egative lookahead matches the search string at any point where a string not matching pattern 的字符串開(kāi)始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預(yù)查不消耗字符,也就是說(shuō),在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開(kāi)始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開(kāi)始  
x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。  
[xyz] 字符集合。匹配所包含的任意一個(gè)字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。  
[^xyz] 負(fù)值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。  
[a-z] 字符范圍。匹配指定范圍內(nèi)的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內(nèi)的任意小寫(xiě)字母字符。  
[^a-z] 負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內(nèi)的任意字符。  
b 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如, 'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。  
B 匹配非單詞邊界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 
cx 匹配由x指明的控制字符。例如, cM 匹配一個(gè) Control-M 或回車(chē)符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個(gè)原義的 'c' 字符。  
d 匹配一個(gè)數(shù)字字符。等價(jià)于 [0-9]。  
D 匹配一個(gè)非數(shù)字字符。等價(jià)于 [^0-9]。  
f 匹配一個(gè)換頁(yè)符。等價(jià)于 x0c 和 cL。 
n 匹配一個(gè)換行符。等價(jià)于 x0a 和 cJ。 
r 匹配一個(gè)回車(chē)符。等價(jià)于 x0d 和 cM。 
s 匹配任何空白字符,包括空格、制表符、換頁(yè)符等等。等價(jià)于 [ fnrtv]。 
S 匹配任何非空白字符。等價(jià)于 [^ fnrtv]。 
t 匹配一個(gè)制表符。等價(jià)于 x09 和 cI。 
v 匹配一個(gè)垂直制表符。等價(jià)于 x0b 和 cK。 
w 匹配包括下劃線(xiàn)的任何單詞字符。等價(jià)于'[A-Za-z0-9_]'。  
W 匹配任何非單詞字符。等價(jià)于 '[^A-Za-z0-9_]'。  
xn 匹配 n,其中 n 為十六進(jìn)制轉(zhuǎn)義值。十六進(jìn)制轉(zhuǎn)義值必須為確定的兩個(gè)數(shù)字長(zhǎng)。例如, 'x41' 匹配 "A"。'x041' 則等價(jià)于 'x04'  "1"。正則表達(dá)式中可以使用 ASCII 編碼。. 
num 匹配 num,其中 num 是一個(gè)正整數(shù)。對(duì)所獲取的匹配的引用。例如,'(.)1' 匹配兩個(gè)連續(xù)的相同字符。  
n 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)后向引用。如果 n 之前至少 n 個(gè)獲取的子表達(dá)式,則 n 為后向引用。否則,如果 n 為八進(jìn)制數(shù)字 (0-7),則 n 為一個(gè)八進(jìn)制轉(zhuǎn)義值。 
nm 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)后向引用。如果 nm 之前至少有is preceded by at least nm 個(gè)獲取得子表達(dá)式,則 nm 為后向引用。如果 nm 之前至少有 n 個(gè)獲取,則 n 為一個(gè)后跟文字 m 的后向引用。如果前面的條件都不滿(mǎn)足,若  n 和 m 均為八進(jìn)制數(shù)字 (0-7),則 nm 將匹配八進(jìn)制轉(zhuǎn)義值 nm。 
nml 如果 n 為八進(jìn)制數(shù)字 (0-3),且 m 和 l 均為八進(jìn)制數(shù)字 (0-7),則匹配八進(jìn)制轉(zhuǎn)義值 nml。 
un 匹配 n,其中 n 是一個(gè)用四個(gè)十六進(jìn)制數(shù)字表示的 Unicode 字符。例如, u00A9 匹配版權(quán)符號(hào) (?)。
4.
建立正則表達(dá)式
構(gòu)造正則表達(dá)式的方法和創(chuàng)建數(shù)學(xué)表達(dá)式的方法一樣。也就是用多種元字符與操作符將小的表達(dá)式結(jié)合在一起來(lái)創(chuàng)建更大的表達(dá)式。 
可以通過(guò)在一對(duì)分隔符之間放入表達(dá)式模式的各種組件來(lái)構(gòu)造一個(gè)正則表達(dá)式。對(duì) Visual Basic Scripting Edition 而言,分隔符為一對(duì)正斜杠 (/) 字符。例如:
/expression/
對(duì) VBScript 而言,則采用一對(duì)引號(hào) ("") 來(lái)確定正則表達(dá)式的邊界。例如:
"expression"
在上面所示的兩個(gè)示例中,正則表達(dá)式模式 (expression) 均存儲(chǔ)在RegExp 對(duì)象的Pattern 屬性中。
正則表達(dá)式的組件可以是單個(gè)的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。
--------------------------------------------------------------------------------
5.
優(yōu)先權(quán)順序
在構(gòu)造正則表達(dá)式之后,就可以象數(shù)學(xué)表達(dá)式一樣來(lái)求值,也就是說(shuō),可以從左至右并按照一個(gè)優(yōu)先權(quán)順序來(lái)求值。 
下表從最高優(yōu)先級(jí)到最低優(yōu)先級(jí)列出各種正則表達(dá)式操作符的優(yōu)先權(quán)順序:
操作符 描述 
轉(zhuǎn)義符 
(), (?, (?=), [] 圓括號(hào)和方括號(hào) 
*, +, ?, {n}, {n,}, {n,m} 限定符 
^, $, anymetacharacter 位置和順序 
| “或”操作 
--------------------------------------------------------------------------------
6.
普通字符
普通字符由所有那些未顯式指定為元字符的打印和非打印字符組成。這包括所有的大寫(xiě)和小寫(xiě)字母字符,所有數(shù)字,所有標(biāo)點(diǎn)符號(hào)以及一些符號(hào)。 
最簡(jiǎn)單的正則表達(dá)式是一個(gè)單獨(dú)的普通字符,可以匹配所搜索字符串中的該字符本身。例如,單字符模式 'A' 可以匹配所搜索字符串中任何位置出現(xiàn)的字母 'A'。這里有一些單字符正則表達(dá)式模式的示例:
/a/
/7/
/M/
等價(jià)的 VBScript 單字符正則表達(dá)式為:
"a"
"7"
"M"
可以將多個(gè)單字符組合在一起得到一個(gè)較大的表達(dá)式。例如,下面的 Visual Basic Scripting Edition 正則表達(dá)式不是別的,就是通過(guò)組合單字符表達(dá)式 'a'、'7'以及 'M' 所創(chuàng)建出來(lái)的一個(gè)表達(dá)式。 
/a7M/
等價(jià)的 VBScript 表達(dá)式為:
"a7M"
請(qǐng)注意這里沒(méi)有連接操作符。所需要做的就是將一個(gè)字符放在了另一個(gè)字符后面。
--------------------------------------------------------------------------------
特殊字符
有不少元字符在試圖對(duì)其進(jìn)行匹配時(shí)需要進(jìn)行特殊的處理。要匹配這些特殊字符,必須首先將這些字符轉(zhuǎn)義,也就是在前面使用一個(gè)反斜杠 ()。下表給出了這些特殊字符及其含義:
特殊字符 說(shuō)明 
$ 匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,則 $ 也匹配 'n' 或 'r'。要匹配 $ 字符本身,請(qǐng)使用 $。 
( ) 標(biāo)記一個(gè)子表達(dá)式的開(kāi)始和結(jié)束位置。子表達(dá)式可以獲取供以后使用。要匹配這些字符,請(qǐng)使用 ( 和 )。 
* 匹配前面的子表達(dá)式零次或多次。要匹配 * 字符,請(qǐng)使用 *。 
+ 匹配前面的子表達(dá)式一次或多次。要匹配 + 字符,請(qǐng)使用 +。 
. 匹配除換行符 n之外的任何單字符。要匹配 .,請(qǐng)使用 。 
[  標(biāo)記一個(gè)中括號(hào)表達(dá)式的開(kāi)始。要匹配 [,請(qǐng)使用 [。  
? 匹配前面的子表達(dá)式零次或一次,或指明一個(gè)非貪婪限定符。要匹配 ? 字符,請(qǐng)使用 ?。 
將下一個(gè)字符標(biāo)記為或特殊字符、或原義字符、或后向引用、或八進(jìn)制轉(zhuǎn)義符。例如, 'n' 匹配字符 'n'。'n' 匹配換行符。序列 '' 匹配 "",而 '(' 則匹配 "("。 
^ 匹配輸入字符串的開(kāi)始位置,除非在方括號(hào)表達(dá)式中使用,此時(shí)它表示不接受該字符集合。要匹配 ^ 字符本身,請(qǐng)使用 ^。 
{ 標(biāo)記限定符表達(dá)式的開(kāi)始。要匹配 {,請(qǐng)使用 {。 
| 指明兩項(xiàng)之間的一個(gè)選擇。要匹配 |,請(qǐng)使用 |。 
--------------------------------------------------------------------------------
12下一頁(yè)閱讀全文
您可能感興趣的文章:
  • php正則表達(dá)式中的非貪婪模式匹配
  • php中正則表達(dá)式中的特殊符號(hào)
  • 最常用的PHP正則表達(dá)式收集整理
  • php中utf-8編碼下用正則表達(dá)式如何匹配漢字
  • PHP 正則表達(dá)式常用函數(shù)使用小結(jié)
  • php 正則 不包含某字符串的正則表達(dá)式
  • PHP 正則表達(dá)式函數(shù)庫(kù)(兩套)
  • php 正則表達(dá)式提取網(wǎng)頁(yè)超級(jí)鏈接url的函數(shù)
  • PHP匹配連續(xù)的數(shù)字或字母的正則表達(dá)式
  • php 手機(jī)號(hào)碼驗(yàn)證正則表達(dá)式
  • php URL驗(yàn)證正則表達(dá)式
  • PHP正則表達(dá)式的逆向引用與子模式分析
  • php正則表達(dá)式的模式修正符和逆向引用使用介紹
  • PHP匹配多行的正則表達(dá)式分析
  • PHP 正則表達(dá)式特殊字符 [:alnum:] [:alpha:] 等
  • PHP提取字符串中的圖片地址[正則表達(dá)式]
  • PHP 正則表達(dá)式 推薦
  • php中郵箱地址正則表達(dá)式實(shí)現(xiàn)與詳解
  • php正則表達(dá)式使用的詳細(xì)介紹
  • PHP函數(shù)preg_match_all正則表達(dá)式的基本使用詳細(xì)解析
  • php用正則表達(dá)式匹配URL的簡(jiǎn)單方法
  • php正則表達(dá)式匹配img中任意屬性的方法
  • php使用正則表達(dá)式提取字符串中尖括號(hào)、小括號(hào)、中括號(hào)、大括號(hào)中的字符串
  • php使用curl和正則表達(dá)式抓取網(wǎng)頁(yè)數(shù)據(jù)示例
  • php過(guò)濾HTML標(biāo)簽、屬性等正則表達(dá)式匯總
  • php中字符串和正則表達(dá)式詳解
  • 淺談php正則表達(dá)式中的非貪婪模式匹配的使用
  • php正則表達(dá)式取得內(nèi)容所有鏈接的方法
  • php正則表達(dá)式獲取內(nèi)容所有鏈接
  • 15個(gè)超實(shí)用的php正則表達(dá)式
  • PHP正則表達(dá)式基礎(chǔ)入門(mén)

標(biāo)簽:黔東 婁底 衡陽(yáng) 邯鄲 樂(lè)山 德陽(yáng) 海南 內(nèi)江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP和正則表達(dá)式教程集合之一第1/2頁(yè)》,本文關(guān)鍵詞  PHP,和,正則,表達(dá)式,教程,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP和正則表達(dá)式教程集合之一第1/2頁(yè)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于PHP和正則表達(dá)式教程集合之一第1/2頁(yè)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章