PHP代碼
$str = preg_replace("/(a.*?>)(.*?)(\/a>)/", '\1span class="link">\2/span>\3', $str);
其中用了三個(gè)子模式(每個(gè)圓括號(hào)中內(nèi)容為一個(gè)子模式),第一個(gè)是鏈接開(kāi)始標(biāo)簽,第二個(gè)是鏈接文本,第三個(gè)是/a>
然后第二個(gè)參數(shù)中\(zhòng)1、\2、\3就表示這三個(gè)部分,要替換成什么樣子還不簡(jiǎn)單?
獲取頁(yè)面中的所有鏈接地址的PHP函數(shù)
下面這個(gè)用PHP寫(xiě)的函數(shù),可以獲取任意的字符串$string中的所有鏈接地址($string可以是從一個(gè)HTML頁(yè)面文件直接讀取出來(lái)的字符串),結(jié)果保存在一個(gè)數(shù)組中返回.該函數(shù)自動(dòng)把電子郵件地址排除在外,而且返回的數(shù)組中不會(huì)有重復(fù)元素.
function GetAllLink($string) { $string = str_replace("\r","",$string); $string = str_replace("\n","",$string); $regex[url] = "((http|https|ftp|telnet|news):\/\/)?([a-z0-9_\-\/\.]+\.[][a-z0-9:;#@=_~%\&;\/\.\,\+\-]+)"; $regex[email] = "([a-z0-9_\-]+)@([a-z0-9_\-]+\.[a-z0-9\-\._\-]+)"; //去掉標(biāo)簽之間的文字 $string = eregi_replace(">[^>]+",">", $string); //去掉JAVASCRIPT代碼 $string = eregi_replace("!--.*//-->","", $string); //去掉非a>的HTML標(biāo)簽 $string = eregi_replace("[^a][^>]*>","", $string); //去掉EMAIL鏈接 $string = eregi_replace("a([ ]+)href=([\"']*)mailto:($regex[email])([\"']*)[^>]*>","", $string); //替換需要的網(wǎng)頁(yè)鏈接 $string = eregi_replace("a([ ]+)href=([\"']*)($regex[url])([\"']*)[^>]*>","\\3\t", $string); $output[0] = strtok($string, "\t"); while(($temp = strtok("\t"))) { if($temp !in_array($temp, $output)) $output[++$i] = $temp; } return $output; }
以下是以PHP的語(yǔ)法所寫(xiě)的示例
驗(yàn)證字符串是否只含數(shù)字與英文,字符串長(zhǎng)度并在4~16個(gè)字符之間
?php $str = 'a1234'; if (preg_match("^[a-zA-Z0-9]{4,16}$", $str)) { echo "驗(yàn)證成功";} else { echo "驗(yàn)證失敗";}?>
簡(jiǎn)易的臺(tái)灣身分證字號(hào)驗(yàn)證
?php $str = 'a1234'; if (preg_match("^(?:\d{15}|\d{18})$", $str)) { echo "驗(yàn)證成功"; } else { echo "驗(yàn)證失敗";} ?>
下面的代碼實(shí)現(xiàn)文字中的代碼塊,功能就如你在腳本之家看到的代碼一樣。
function codedisp($code) { global $discuzcodes; $discuzcodes['pcodecount']++; $code = htmlspecialchars(str_replace('\\"', '"', preg_replace("/^[\n\r]*(.+?)[\n\r]*$/is", "\\1", $code))); $discuzcodes['codehtml'][$discuzcodes['pcodecount']] = "br>div class=\"msgheader\">div class=\"right\">a href=\"###\" class=\"smalltxt\" onclick=\"copycode($('phpcode$discuzcodes[codecount]'));\">[復(fù)制此代碼]/a>/div>代碼如下:/div>div class=\"msgborder\" id=\"phpcode$discuzcodes[codecount]\">".fhtml2($code)."/div>br>"; $discuzcodes['codecount']++; return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]"; } $message = preg_replace("/\s*\[code\](.+?)\[\/code\]\s*/ies", "codedisp('\\1')", $message); $message = preg_replace("/\s*\[html\](.+?)\[\/html\]\s*/ies", "htmldisp('\\1')", $message);
匹配中文字符的正則表達(dá)式: [\u4e00-\u9fa5]
評(píng)注:匹配中文還真是個(gè)頭疼的事,有了這個(gè)表達(dá)式就好辦了
匹配雙字節(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*?)[^>]*>.*?/\1>|.*? />
評(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è)基本可以滿(mǎn)足需求
匹配帳號(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{3}-\d{8}|\d{4}-\d{7}
評(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{5}(?!\d)
評(píng)注:中國(guó)郵政編碼為6位數(shù)字
匹配身份證:\d{15}|\d{18}
評(píng)注:中國(guó)的身份證為15位或18位
匹配ip地址:\d+\.\d+\.\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è)英文字母的大寫(xiě)組成的字符串
^[a-z]+$ //匹配由26個(gè)英文字母的小寫(xiě)組成的字符串
^[A-Za-z0-9]+$ //匹配由數(shù)字和26個(gè)英文字母組成的字符串
^\w+$ //匹配由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串
下面是一些特殊字符:
正則表達(dá)式中的特殊字符: (學(xué)習(xí)參考書(shū)-<<精通正則表達(dá)式>>)
字符
意義:對(duì)于字符,通常表示按字面意義,指出接著的字符為特殊字符,不作解釋。
例如:/b/匹配字符'b',通過(guò)在b 前面加一個(gè)反斜杠,也就是/b/,則該字符變成特殊字符,表示
匹配一個(gè)單詞的分界線。
或者:
對(duì)于幾個(gè)字符,通常說(shuō)明是特殊的,指出緊接著的字符不是特殊的,而應(yīng)該按字面解釋。
例如:*是一個(gè)特殊字符,匹配任意個(gè)字符(包括0個(gè)字符);例如:/a*/意味匹配0個(gè)或多個(gè)a。
為了匹配字面上的*,在a前面加一個(gè)反斜杠;例如:/a*/匹配'a*'。
字符^
意義:表示匹配的字符必須在最前邊。
例如:/^A/不匹配"an A,"中的'A',但匹配"An A."中最前面的'A'。
字符$
意義:與^類(lèi)似,匹配最末的字符。
例如:/t$/不匹配"eater"中的't',但匹配"eat"中的't'。
字符*
意義:匹配*前面的字符0次或n次。
例如:/bo*/匹配"A ghost booooed"中的'boooo'或"A bird warbled"中的'b',但不匹配"A goat g
runted"中的任何字符。
字符+
意義:匹配+號(hào)前面的字符1次或n次。等價(jià)于{1,}。
例如:/a+/匹配"candy"中的'a'和"caaaaaaandy."中的所有'a'。
字符?
意義:匹配?前面的字符0次或1次。
例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。
字符.
意義:(小數(shù)點(diǎn))匹配除換行符外的所有單個(gè)的字符。
例如:/.n/匹配"nay, an apple is on the tree"中的'an'和'on',但不匹配'nay'。
字符(x)
意義:匹配'x'并記錄匹配的值。
例如:/(foo)/匹配和記錄"foo bar."中的'foo'。匹配子串能被結(jié)果數(shù)組中的素[1], ..., [n] 返
回,或被RegExp對(duì)象的屬性$1, ..., $9返回。
字符x|y
意義:匹配'x'或者'y'。
例如:/green|red/匹配"green apple"中的'green'和"red apple."中的'red'。
字符{n}
意義:這里的n是一個(gè)正整數(shù)。匹配前面的n個(gè)字符。
例如:/a{2}/不匹配"candy,"中的'a',但匹配"caandy," 中的所有'a'和"caaandy."中前面的兩個(gè)
'a'。
字符{n,}
意義:這里的n是一個(gè)正整數(shù)。匹配至少n個(gè)前面的字符。
例如:/a{2,}不匹配"candy"中的'a',但匹配"caandy"中的所有'a'和"caaaaaaandy."中的所有'a'
字符{n,m}
意義:這里的n和m都是正整數(shù)。匹配至少n個(gè)最多m個(gè)前面的字符。
例如:/a{1,3}/不匹配"cndy"中的任何字符,但匹配 "candy,"中的'a',"caandy," 中的前面兩個(gè)
'a'和"caaaaaaandy"中前面的三個(gè)'a',注意:即使"caaaaaaandy" 中有很多個(gè)'a',但只匹配前面的三
個(gè)'a'即"aaa"。
字符[xyz]
意義:一字符列表,匹配列出中的任一字符。你可以通過(guò)連字符-指出一個(gè)字符范圍。
例如:[abcd]跟[a-c]一樣。它們匹配"brisket"中的'b'和"ache"中的'c'。
字符[^xyz]
意義:一字符補(bǔ)集,也就是說(shuō),它匹配除了列出的字符外的所有東西。 你可以使用連字符-指出一
字符范圍。
例如:[^abc]和[^a-c]等價(jià),它們最早匹配"brisket"中的'r'和"chop."中的'h'。
字符
意義:匹配一個(gè)空格(不要與b混淆)
字符b
意義:匹配一個(gè)單詞的分界線,比如一個(gè)空格(不要與混淆)
例如:/bnw/匹配"noonday"中的'no',/wyb/匹配"possibly yesterday."中的'ly'。
字符B
意義:匹配一個(gè)單詞的非分界線
例如:/wBn/匹配"noonday"中的'on',/yBw/匹配"possibly yesterday."中的'ye'。
字符cX
意義:這里的X是一個(gè)控制字符。匹配一個(gè)字符串的控制字符。
例如:/cM/匹配一個(gè)字符串中的control-M。
字符d
意義:匹配一個(gè)數(shù)字,等價(jià)于[0-9]。
例如:/d/或/[0-9]/匹配"B2 is the suite number."中的'2'。
字符D
意義:匹配任何的非數(shù)字,等價(jià)于[^0-9]。
例如:/D/或/[^0-9]/匹配"B2 is the suite number."中的'B'。
字符f
意義:匹配一個(gè)表單符
字符n
意義:匹配一個(gè)換行符
字符r
意義:匹配一個(gè)回車(chē)符
字符s
意義:匹配一個(gè)單個(gè)white空格符,包括空格,tab,form feed,換行符,等價(jià)于[ fnrtv]。
例如:/sw*/匹配"foo bar."中的' bar'。
字符S
意義:匹配除white空格符以外的一個(gè)單個(gè)的字符,等價(jià)于[^ fnrtv]。
例如:/S/w*匹配"foo bar."中的'foo'。
字符t
意義:匹配一個(gè)制表符
字符v
意義:匹配一個(gè)頂頭制表符
字符w
意義:匹配所有的數(shù)字和字母以及下劃線,等價(jià)于[A-Za-z0-9_]。
例如:/w/匹配"apple,"中的'a',"$5.28,"中的'5'和"3D."中的'3'。
字符W
意義:匹配除數(shù)字、字母外及下劃線外的其它字符,等價(jià)于[^A-Za-z0-9_]。
例如:/W/或者/[^$A-Za-z0-9_]/匹配"50%."中的'%'。
字符n
意義:這里的n是一個(gè)正整數(shù)。匹配一個(gè)正則表達(dá)式的最后一個(gè)子串的n的值(計(jì)數(shù)左圓括號(hào))。
例如:/apple(,)sorange1/匹配"apple, orange, cherry, peach."中的'apple, orange',下面
有一個(gè)更加完整的例子。
注意:如果左圓括號(hào)中的數(shù)字比n指定的數(shù)字還小,則n取下一行的八進(jìn)制escape作為描述。
字符ooctal和xhex
意義:這里的ooctal是一個(gè)八進(jìn)制的escape值,而xhex是一個(gè)十六進(jìn)制的escape值,允許在一個(gè)正則表達(dá)式中嵌入ASCII碼。
通用模式
定界符,通常使用 "/"做為定界符開(kāi)始和結(jié)束,也可以使用"#"。
什么時(shí)候使用"#"呢?一般是在你的字符串中有很多"/"字符的時(shí)候,因?yàn)檎齽t的時(shí)候這種字符需要轉(zhuǎn)義,比如uri。
使用"/"定界符的代碼如下.
標(biāo)簽:茂名 昆明 河北 秦皇島 西寧 玉林 吉林 怒江
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《最常用的PHP正則表達(dá)式收集整理》,本文關(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)。