小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

PHP preg

 學(xué)海無(wú)涯GL 2015-01-19
foo ——————字符串“foo”
^foo ——————以“foo”開(kāi)頭的字符串
foo$ ——————以“foo”結(jié)尾的字符串
^foo$ ——————“foo”開(kāi)頭和結(jié)尾,(只能是他自己 )
[abc]—————— a 或者b 或者c
[a-z] —————— a到z之間任意字母
[^A-Z]——————除了 A-Z這些之外的字符
(gif|jpg)——————“gif”或者 “jpeg”
[a-z]+—————— 一個(gè)或者多個(gè) a到z之間任意字母
[0-9.-]—————— 0-9之間任意數(shù)字,或者 點(diǎn) 或者 橫線
^[a-zA-Z0-9_]{1,}$—————— 至少一個(gè)字母數(shù)字下劃線
([wx])([yz])—————— wy或wz或xy或xz
[^A-Za-z0-9]—————— 字符數(shù)字之外的字符
([A-Z]{3}|[0-9]{4})—————— 三個(gè)大寫字母或者4個(gè)數(shù)字


   常用的正則表達(dá)式

    1、非負(fù)整數(shù):”^\d+$”

    2、正整數(shù):”^[0-9]*[1-9][0-9]*$”

    3、非正整數(shù):”^((-\d+)|(0+))$”

    4、負(fù)整數(shù):”^-[0-9]*[1-9][0-9]*$”

    5、整數(shù):”^-?\d+$”

    6、非負(fù)浮點(diǎn)數(shù):”^\d+(\.\d+)?$”

 7、正浮點(diǎn)數(shù):”^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$”

    8、非正浮點(diǎn)數(shù):”^((-\d+\.\d+)?)|(0+(\.0+)?))$”

    9、負(fù)浮點(diǎn)數(shù):”^(-((正浮點(diǎn)數(shù)正則式)))$”

    10、英文字符串:”^[A-Za-z]+$”

    11、英文大寫串:”^[A-Z]+$”

    12、英文小寫串:”^[a-z]+$”

    13、英文字符數(shù)字串:”^[A-Za-z0-9]+$”

    14、英數(shù)字加下劃線串:”^\w+$”

    15、E-mail地址:”^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”

    16、URL:”^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$”

 

preg_match() 該函數(shù)preg_match按照模式去匹配字符串,如果符合則返回TRUE,否則返回FALSE
preg_match_all() 該函數(shù) preg_match_all() 在字符串中匹配出全部符合模式的字符串.

* preg_match() 返回 pattern 所匹配的次數(shù)。要么是 0 次(沒(méi)有匹配)或 1 次,因?yàn)?preg_match() 在第一次匹配之后將停止搜索。
* http://www.yesky.com/imagesnew/software/php/zh/function.preg-match.html

* preg_match_all() 則相反,會(huì)一直搜索到 subject 的結(jié)尾處。如果出錯(cuò) preg_match() 返回 FALSE。
* http://www.yesky.com/imagesnew/software/php/zh/function.preg-match-all.html


 preg_replace()  該函數(shù)與ereg_replace()類似,不同在于它利用匹配的模式去替換輸入的參數(shù)
 http://www.yesky.com/imagesnew/software/php/zh/function.preg-replace.htm

 preg_split() 該函數(shù)與split()類似 不同在于它將與正則表達(dá)式匹配的字符當(dāng)做分割的模式
 http://www.yesky.com/imagesnew/software/php/zh/function.preg-split.html

 preg_grep() 該函數(shù)preg_grep() 匹配數(shù)組中全部元素,返回符合正則表達(dá)式的元素組成的數(shù)組

 preg_quote() 轉(zhuǎn)義正則表達(dá)式字符



 需要我們用程序處理的數(shù)據(jù)并不總是預(yù)先以數(shù)據(jù)庫(kù)思維設(shè)計(jì)的,或者說(shuō)是無(wú)法用數(shù)據(jù)庫(kù)的結(jié)構(gòu)去存儲(chǔ)的。
比如模版引擎解析模版、垃圾敏感信息過(guò)濾等等。
一般這種情況,我們用正則按我們的規(guī)則去匹配preg_match、替換preg_replace。
但一般的應(yīng)用中,無(wú)非是些數(shù)據(jù)庫(kù)CRUD,正則擺弄的機(jī)會(huì)很少。
根據(jù)前面說(shuō)的,兩種場(chǎng)景:統(tǒng)計(jì)分析,用匹配;處理用替換。

PHP preg_replace() 正則替換,與Javascript 正則替換不同,PHP preg_replace() 默認(rèn)就是替換所有符號(hào)匹配條件的元素。 

復(fù)制代碼 代碼如下:

preg_replace (正則表達(dá)式, 替換成, 字符串, 最大替換次數(shù)【默認(rèn)-1,無(wú)數(shù)次】, 替換次數(shù))


大部分語(yǔ)言的正則表達(dá)式都是差不多的,不過(guò)也有細(xì)微的差異。

PHP 正則表達(dá)式
插入表格
\   將下一個(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)?”可以匹配“does”或“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?!皁{1,}”等價(jià)于“o+”?!皁{0,}”則等價(jià)于“o*”。
{n,m}m和n均為非負(fù)整數(shù),其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”將匹配“fooooood”中的前三個(gè)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”。
.點(diǎn)匹配除“\n”之外的任何單個(gè)字符。要匹配包括“\n”在內(nèi)的任何字符,請(qǐng)使用像“[\s\S]”的模式。
(pattern)匹配pattern并獲取這一匹配。所獲取的匹配可以從產(chǎn)生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$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)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。預(yù)查不消耗字符,也就是說(shuō),在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開(kāi)始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開(kāi)始。
(?!pattern)正向否定預(yù)查,在任何不匹配pattern的字符串開(kāi)始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern)反向肯定預(yù)查,與正向肯定預(yù)查類似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern)反向否定預(yù)查,與正向否定預(yù)查類似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
x|y匹配x或y。例如,“z|food”能匹配“z”或“food”?!?z|f)ood”則匹配“zood”或“food”。
[xyz]字符集合。匹配所包含的任意一個(gè)字符。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz]負(fù)值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
[a-z]字符范圍。匹配指定范圍內(nèi)的任意字符。例如,“[a-z]”可以匹配“a”到“z”范圍內(nèi)的任意小寫字母字符。注意:只有連字符在字符組內(nèi)部時(shí),并且出兩個(gè)字符之間時(shí),才能表示字符的范圍; 如果出字符組的開(kāi)頭,則只能表示連字符本身.
[^a-z]負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范圍內(nèi)的任意字符。
\b匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
\B匹配非單詞邊界?!癳r\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
\cx匹配由x指明的控制字符。例如,\cM匹配一個(gè)Control-M或回車符。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è)回車符。等價(jià)于\x0d和\cM。
\s匹配任何空白字符,包括空格、制表符、換頁(yè)符等等。等價(jià)于[ \f\n\r\t\v]。
\S匹配任何非空白字符。等價(jià)于[^ \f\n\r\t\v]。
\t匹配一個(gè)制表符。等價(jià)于\x09和\cI。
\v匹配一個(gè)垂直制表符。等價(jià)于\x0b和\cK。
\w匹配包括下劃線的任何單詞字符。等價(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之前至少有nm個(gè)獲得子表達(dá)式,則nm為向后引用。如果\nm之前至少有n個(gè)獲取,則n為一個(gè)后跟文字m的向后引用。如果前面的條件都不滿足,若n和m均為八進(jìn)制數(shù)字(0-7),則\nm將匹配八進(jìn)制轉(zhuǎn)義值nm。
\nml如果n為八進(jìn)制數(shù)字(0-7),且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)(?)。


上表是正則表達(dá)式比較全面的解釋,而商標(biāo)中的正則字符都有特殊含義,已經(jīng)不再代表原字符含義。如正則表達(dá)式中“+”不代表加號(hào),而是代表匹配一次或多次。而如果想要讓“+”表示加號(hào),則需要在其前面加上“\”轉(zhuǎn)義,也就是用“\+”表示加號(hào)。

復(fù)制代碼 代碼如下:

1+1=2  正則表達(dá)式是: 1\+1=2
而正則表達(dá)式 1+1=2 可以代表,多個(gè)1=2,即:
11=2     正則表達(dá)式:1+1=2
111=2    正則表達(dá)式:1+1=2
1111=2   正則表達(dá)式:1+1=2
……

也就是說(shuō)所有正則字符都有特定含義,如果需要再用來(lái)表示原字符含義,就需要在前面加“\”轉(zhuǎn)義,即使非正則字符,用“\”轉(zhuǎn)義也是沒(méi)有問(wèn)題的。

復(fù)制代碼 代碼如下:

1+1=2  正則表達(dá)式也可以是: \1\+\1\=\2
對(duì)所有字符都轉(zhuǎn)義,但是這種不建議使用。

正則表達(dá)式必須要使用定界符包圍起來(lái),在Javascript中定界符是“/”,而在PHP中,比較常見(jiàn)的是用“/”定界,也可以用“#”定界,而且外面還需要用引號(hào)包圍起來(lái)。

如果正則表達(dá)式包含這些定界符,您就需要對(duì)這些字符進(jìn)行轉(zhuǎn)義。

PHP 正則表達(dá)式定界符

大多數(shù)語(yǔ)言的正則表達(dá)式都是由“/”作為定界符的,而在PHP中,還可以使用“#”定界,如果字符串中包含大量“/”字符,在使用“/”定界的時(shí)候,就需要對(duì)這些“/”轉(zhuǎn)義,而使用“#”就不需要轉(zhuǎn)義,更簡(jiǎn)潔。

代碼如下:

<?php
$weigeti='W3CSchool 在線教程的網(wǎng)址是 http://e.jb51.net/ ,你能把這個(gè)網(wǎng)址替換成正確的網(wǎng)址嗎?';
// 上面的要求就是把http://e.jb51.net/ 替換成 http://e.jb51.net/w3c/
// 其中的  
.   :   -   都是正則符號(hào),所以需要轉(zhuǎn)義,而 / 是定界符,如果字符串中包含 / 定界符,就需要轉(zhuǎn)義
echo preg_replace('/http\:\/\/www\.jb51\.net\//','http://e.jb51.net/w3c/',$weigeti);
// 在 #作為定界符,/ 就不再是定界符的含義,就不需要轉(zhuǎn)義了。
echo preg_replace('#http\://www\.jb51\.net/#','http://e.jb51.net/w3c/',$weigeti);
//上面兩條輸出結(jié)果都一樣,【W(wǎng)3CSchool 在線教程的網(wǎng)址是 http://e.jb51.net/w3c/ ,你能把這個(gè)網(wǎng)址替換成正確的網(wǎng)址嗎?】
?>

通過(guò)上面的兩條PHP 正則替換代碼我們可以發(fā)現(xiàn),如果正則語(yǔ)句中包含大量“/”,無(wú)論使用“/” 還是 “#”做定界符都是可以的,但是使用“#”能讓代碼看起來(lái)更簡(jiǎn)潔。但是E維科技建議您還是保持使用“/”作為定界符,因?yàn)樵贘avascript等語(yǔ)言中,只能使用“/”作為定界符,這樣寫起來(lái)可以形成習(xí)慣,貫通于其他語(yǔ)言中。

PHP 正則表達(dá)式修飾符

修飾符被放在PHP正則表達(dá)式定界符“/”尾部,在正則表達(dá)式尾部引號(hào)之前。

代碼如下:

i   忽略大小寫,匹配不考慮大小寫
m 多行獨(dú)立匹配,如果字符串不包含[\n]等換行符就和普通正則一樣。
s 設(shè)置正則符號(hào) . 可以匹配換行符[\n],如果沒(méi)有設(shè)置,正則符號(hào).不能匹配換行符\n。
x 忽略沒(méi)有轉(zhuǎn)義的空格
e eval() 對(duì)匹配后的元素執(zhí)行函數(shù)。
A 前置錨定,約束匹配僅從目標(biāo)字符串開(kāi)始搜索
D 鎖定$作為結(jié)尾,如果沒(méi)有D,如果字符串包含[\n]等換行符,$依舊依舊匹配換行符。如果設(shè)置了修飾符m,修飾符D 就會(huì)被忽略。
S 對(duì)非錨定的匹配進(jìn)行分析
U 非貪婪,如果在正則字符量詞后加“?”,就可以恢復(fù)貪婪
X 打開(kāi)與perl 不兼容附件
u 強(qiáng)制字符串為UTF-8編碼,一般在非UTF-8編碼的文檔中才需要這個(gè)。建議UTF-8環(huán)境中不要使用這個(gè),據(jù)E維科技調(diào)查使用這個(gè)會(huì)有一個(gè)Bug。

如果您熟悉Javascript 的正則表達(dá)式,或許一定熟悉Javascript 正則表達(dá)式的修飾符“g”,代表匹配所有符合條件的元素。而在PHP 正則替換中,是匹配所有符號(hào)條件的元素,所以不存在Javascript 修飾符“g”。

PHP 正則中文和忽略大小寫PHP preg_replace() 是區(qū)分大小寫的,同時(shí)只能匹配ASCII編碼內(nèi)的字符串,如果需要匹配不區(qū)分大小寫和中文等字符需要添加相應(yīng)的修飾符 i 或 u。

代碼如下:

<?php
$weigeti='W3CSchool 在線教程網(wǎng)址:http://www.jb51.net/w3school/';
echo preg_replace('/W3CSchool/','w3c',$weigeti);
//大小寫不同,輸出【w3c 在線教程網(wǎng)址:http://www.jb51.net/w3school/】
echo preg_replace('/W3CSchool/i','w3c',$weigeti);
//忽略大小寫,執(zhí)行替換輸出【w3c 在線教程網(wǎng)址:http://e.jb51.net/w3c/】
echo preg_replace('/網(wǎng)址/u','',$weigeti);
//強(qiáng)制 UTF-8中文,執(zhí)行替換,輸出【W(wǎng)3CSchool 在線教程:http://www.jb51.net/w3school/】
?>

大小寫和中文在PHP中都是敏感的,但是在Javascript正則中,只對(duì)大小寫敏感,忽略大小寫也是通過(guò)修飾符 i 作用的,但是Javascript 不需要告知是否是UTF-8中文等特殊字符,直接可以匹配中文。

PHP 正則換行符實(shí)例

PHP 正則表達(dá)式在遇到換行符時(shí),會(huì)將換行符當(dāng)做字符串中間一個(gè)普通字符。而通用符號(hào).不能匹配\n,所以遇到帶有換行符的字符串正則會(huì)有很多要點(diǎn)。

代碼如下:

<?php
$weigeti="jb51.net\nIS\nLOVING\nYOU";

// 想要把上面$weigeti 替換成jb51.net

echo preg_replace('/^[A-Z].*[A-Z]$/','',$weigeti);
// 這個(gè)正則表達(dá)式是,匹配只包含\w的元素,$weigeti 是以V開(kāi)頭,符合[A-Z],而且結(jié)尾是U,也符合[A-Z]。.無(wú)法匹配\n
// 輸出【jb51.net IS LOVEING YOU】

echo preg_replace('/^[A-Z].*[A-Z]$/s','',$weigeti);
// 這個(gè)用修飾符s,也就是 . 可以匹配 \n 了,所以整句匹配,輸出空
// 輸出【】

echo preg_replace('/^[A-Z].*[A-Z]$/m','',$weigeti);
// 這里使用了修飾符,將\n作為多行獨(dú)立匹配。也就等價(jià)于:
/*
$preg_m=preg_replace('/^[A-Z].*[A-Z]$/m','',$weigeti);

$p='/^[A-Z].*[A-Z]$/';
$a=preg_replace($p,'','jb51.net');
$b=preg_replace($p,'','IS');
$c=preg_replace($p,'','LOVING');
$d=preg_replace($p,'','YOU');

$preg_m === $a.$b.$c.$d;
*/
// 輸出【jb51.net】
?>

以后您在使用PHP 抓取某個(gè)網(wǎng)站內(nèi)容,并用正則批量替換的時(shí)候,總無(wú)法避免忽略獲取的內(nèi)容包含換行符,所以在使用正則替換的時(shí)候一定要注意。

PHP 正則匹配執(zhí)行函數(shù)PHP 正則替換可以使用一個(gè)修飾符e,代表 eval() 來(lái)執(zhí)行匹配后的內(nèi)容某個(gè)函數(shù)。

代碼如下:

<?php
$weigeti='W3CSchool 在線教程網(wǎng)址:http://www.jb51.net ,你Jbzj!了嗎?';
// 將上面網(wǎng)址轉(zhuǎn)為小寫
echo preg_replace('/(http\:[\/\w\.\-]+\/)/e','strtolower("$1")',$weigeti);
// 使用修飾符e之后,就可以對(duì)匹配的網(wǎng)址執(zhí)行PHP 函數(shù) strtolower() 了
// 輸出 【W(wǎng)3CSchool 在線教程網(wǎng)址:http://www.jb51.net ,你Jbzj!了嗎?】
?>

根據(jù)上面代碼,盡管匹配后的函數(shù) strtolower() 在引號(hào)內(nèi),但是依舊會(huì)被eval()執(zhí)行。

正則替換匹配變量向后引用

如果您熟悉Javascript,一定對(duì)$1 $2 $3 …… 等向后引用比較熟悉,而在 PHP 中這些也可以被當(dāng)作向后引用參數(shù)。而在PHP中,還可以使用 \1 \\1 來(lái)表示向后引用

向后引用的概念就是匹配一個(gè)大片段,這個(gè)正則表達(dá)式內(nèi)部又被用括號(hào)切割成若干小匹配元素,那么每個(gè)匹配元素就被按照小括號(hào)序列用向后引用代替。

代碼如下:

<?php
$weigeti='W3CSchool 在線教程網(wǎng)址:http://www.jb51.net ,你Jbzj!了嗎?';

echo preg_replace('/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/','$1',$weigeti);
echo preg_replace('/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/','\1',$weigeti);
echo preg_replace('/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/','\\1',$weigeti);
// 上面三個(gè)都是輸出 【http://www.jb51.net】

echo preg_replace('/^(.+)網(wǎng)址:(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+$/','欄目:$1<br>網(wǎng)址:$2<br>商標(biāo):$3',$weigeti);
/*
欄目:W3CSchool 在線教程
網(wǎng)址:http://www.jb51.net
商標(biāo):Jbzj!
*/

// 括號(hào)中括號(hào),外面括號(hào)先計(jì)數(shù)
echo preg_replace('/^((.+)網(wǎng)址:(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+)$/','原文:$1<br>欄目:$2<br>網(wǎng)址:$3<br>商標(biāo):$4',$weigeti);
/*
原文:W3CSchool 在線教程網(wǎng)址:http://www.jb51.net ,你Jbzj!了嗎?
欄目:W3CSchool 在線教程
網(wǎng)址:http://www.jb51.net
商標(biāo):Jbzj!
*/
?>





驗(yàn)證域名
檢驗(yàn)一個(gè)字符串是否是個(gè)有效域名.

Php代碼  收藏代碼
  1. $url = "http:///";  
  2. if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i'$url)) {  
  3.     echo "Your url is ok.";  
  4. else {  
  5.     echo "Wrong url.";  
  6. }  


從一個(gè)字符串中 突出某個(gè)單詞
這是一個(gè)非常有用的在一個(gè)字符串中匹配出某個(gè)單詞 并且突出它,非常有效的搜索結(jié)果

Php代碼  收藏代碼
  1. $text = "Sample sentence from KomunitasWeb, regex has become popular in web programming. Now we learn regex. According to wikipedia, Regular s (abbreviated as regex or  
  2.   
  3. regexp, with plural forms regexes, regexps, or regexen) are written in a formal language that can be interpreted by a regular  processor";  
  4. $text = preg_replace("/b(regex)b/i"'<span style="background:#5fc9f6">1</span>'$text);  
  5. echo $text;  


突出查詢結(jié)果在你的 WordPress 博客里就像剛才我說(shuō)的,上面的那段代碼可以很方便的搜索出結(jié)果,而這里是一個(gè)更好的方式去執(zhí)行搜索在某個(gè)WordPress的博客上打開(kāi)你的文件 search.php ,然后找到 方法 the_title() 然后用下面代碼替換掉它

Php代碼  收藏代碼
  1. echo $title;  
  2.   
  3. Now, just before the modified line, add this code:  
  4.   
  5. <?php  
  6.     $title     = get_the_title();  
  7.     $keysexplode(" ",$s);  
  8.     $title     = preg_replace('/('.implode('|'$keys) .')/iu',  
  9.         '<strong>\0</strong>',  
  10.         $title);  
  11. ?>  
  12.   
  13. Save the search.php file and open style.css. Append the following line to it:  
  14.   
  15. strong.search-excerpt { background: yellow; }  


從HTML文檔中獲得全部圖片
如果你曾經(jīng)希望去獲得某個(gè)網(wǎng)頁(yè)上的全部圖片,這段代碼就是你需要的,你可以輕松的建立一個(gè)圖片下載機(jī)器人

Php代碼  收藏代碼
  1. $images = array();  
  2. preg_match_all('/(img|src)=("|')[^"'>]+/i'$data$media);  
  3. unset($data);  
  4. $data=preg_replace('/(img|src)("|'|="|=')(.*)/i',"$3",$media[0]);  
  5. foreach($data as $url)  
  6. {  
  7.     $info = pathinfo($url);  
  8.     if (isset($info['extension']))  
  9.     {  
  10.         if (($info['extension'] == 'jpg') ||  
  11.         ($info['extension'] == 'jpeg') ||  
  12.         ($info['extension'] == 'gif') ||  
  13.         ($info['extension'] == 'png'))  
  14.         array_push($images$url);  
  15.     }  
  16. }  


刪除重復(fù)字母
經(jīng)常重復(fù)輸入字母? 這個(gè)表達(dá)式正適合.

Php代碼  收藏代碼
  1. $text = preg_replace("/s(w+s)1/i""$1"$text);   

 

刪除重復(fù)的標(biāo)點(diǎn)
功能同上,但只是面對(duì)標(biāo)點(diǎn),白白重復(fù)的逗號(hào)

Php代碼  收藏代碼
  1. $text = preg_replace("/.+/i""."$text);  

 

匹配一個(gè)XML或者HTML標(biāo)簽
這個(gè)簡(jiǎn)單的函數(shù)有兩個(gè)參數(shù):第一個(gè)是你要匹配的標(biāo)簽,第二個(gè)是包含XML或HTML的變量,再?gòu)?qiáng)調(diào)下,這個(gè)真的很強(qiáng)大

Php代碼  收藏代碼
  1. function get_tag( $tag$xml ) {  
  2.   $tag = preg_quote($tag);  
  3.   preg_match_all('{<'.$tag.'[^>]*>(.*?)</'.$tag.'>.'}',  
  4.                    $xml,  
  5.                    $matches,  
  6.                    PREG_PATTERN_ORDER);  
  7.   
  8.   return $matches[1];  
  9. }  

 
匹配具有屬性值的XML或者HTML標(biāo)簽
這個(gè)功能和上面的非常相似,但是它允許你匹配的標(biāo)簽內(nèi)部有屬性值,例如你可以輕松匹配 <div id=”header”>

Php代碼  收藏代碼
  1. function get_tag( $attr$value$xml$tag=null ) {  
  2.   ifis_null($tag) )  
  3.     $tag = '\w+';  
  4.   else  
  5.     $tag = preg_quote($tag);  
  6.   
  7.   $attr = preg_quote($attr);  
  8.   $value = preg_quote($value);  
  9.   
  10.   $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*".  
  11.                 "(['\"])$value\\2[^>]*>(.*?)<\/\\1>/"  
  12.   
  13.   preg_match_all($tag_regex,  
  14.                  $xml,  
  15.                  $matches,  
  16.                  PREG_PATTERN_ORDER);  
  17.   
  18.   return $matches[3];  
  19. }  


匹配十六進(jìn)制顏色值
web開(kāi)發(fā)者的另一個(gè)有趣的工具,它允許你匹配和驗(yàn)證十六進(jìn)制顏色值.

Php代碼  收藏代碼
  1. $string = "#555555";  
  2. if (preg_match('/^#(?:(?:[a-fd]{3}){1,2})$/i'$string)) {  
  3. echo "example 6 successful.";  
  4. }  


查找頁(yè)面 title
這段代碼方便查找和打印 網(wǎng)頁(yè) <title> 和</title> 之間的內(nèi)容

Php代碼  收藏代碼
  1. $fp = fopen("http://www./blog","r");  
  2. while (!feof($fp) ){  
  3.     $page .= fgets($fp, 4096);  
  4. }  
  5.   
  6. $titre = eregi("<title>(.*)</title>",$page,$regs);  
  7. echo $regs[1];  
  8. fclose($fp);  


解釋 Apache 日志
大多數(shù)網(wǎng)站使用的都是著名的Apache服務(wù)器,如果你的網(wǎng)站也是,那么使用PHP正則表達(dá)式解析 apache 服務(wù)器日志 怎么樣?

Php代碼  收藏代碼
  1. //Logs: Apache web server  
  2. //Successful hits to HTML files only.  Useful for counting the number of page views.  
  3. '^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)/[^ ?"]+?.html?)??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+"s+(?#status code)200s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$'  
  4.   
  5. //Logs: Apache web server  
  6. //404 errors only  
  7. '^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+"s+(?#status code)404s+((?#bytes transferred)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent)[^"]*)"$'  

 
使用智能引號(hào)代替雙引號(hào)
如果你是一個(gè)印刷愛(ài)好者,你將喜歡這個(gè)允許用智能引號(hào)代替雙引號(hào)的正則表達(dá)式,這個(gè)正則被WORDPRESS在其內(nèi)容上使用

Php代碼  收藏代碼
  1. preg_replace('B"b([^"x84x93x94rn]+)b"B''?1?'$text);  

 

檢驗(yàn)密碼的復(fù)雜度
這個(gè)正則表達(dá)式將檢測(cè)輸入的內(nèi)容是否包含6個(gè)或更多字母,數(shù)字,下劃線和連字符. 輸入必須包含至少一個(gè)大寫字母,一個(gè)小寫字母和一個(gè)數(shù)字

Php代碼  收藏代碼
  1. 'A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}z'  

 

WordPress: 使用正則獲得 帖子上的圖片 
我知道很多人是WORDPRESS的使用者,你可能會(huì)喜歡并且愿意使用 那些從帖子的內(nèi)容檢索下來(lái)的圖像代碼。使用這個(gè)代碼在你的BLOG只需要復(fù)制下面代碼到你的某個(gè)文件里

Php代碼  收藏代碼
  1. <?php if (have_posts()) : ?>  
  2. <?php while (have_posts()) : the_post(); ?>  
  3.   
  4. <?php  
  5. $szPostContent = $post->post_content;  
  6. $szSearchPattern = '~<img [^>]* />~';  
  7.   
  8. // Run preg_match_all to grab all the images and save the results in $aPics  
  9. preg_match_all( $szSearchPattern$szPostContent$aPics );  
  10.   
  11. // Check to see if we have at least 1 image  
  12. $iNumberOfPics = count($aPics[0]);  
  13.   
  14. if ( $iNumberOfPics > 0 ) {  
  15.      // Now here you would do whatever you need to do with the images  
  16.      // For this example the images are just displayed  
  17.      for ( $i=0; $i < $iNumberOfPics ; $i++ ) {  
  18.           echo $aPics[0][$i];  
  19.      };  
  20. };  
  21.   
  22. endwhile;  
  23. endif;  
  24. ?>  


自動(dòng)生成笑臉圖案
被WordPress使用的另一個(gè)方法, 這段代碼可使你把圖像自動(dòng)更換一個(gè)笑臉?lè)?hào)

Php代碼  收藏代碼
  1. $texte='A text with a smiley  ';  
  2. echo str_replace(':-)','<img src="smileys/souriant.png">',$texte);  

 

移除圖片的鏈接

Php代碼  收藏代碼
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  2. <?php  
  3.     $str = '  
  4.         <a href="http://www./">5idev</a>其他字符  
  5.         <a href="http://www.sohu.com/">sohu</a>  
  6.         <a href="http://www.sohu.com/"><img src="http://www./img/news/3176/mot_06.jpg" /></a>  
  7.         <br>';  
  8.   
  9.   
  10.     //echo  preg_replace("/(<a.*?>)(<img.*?>)(<\/a>)/", '$2', $str);   
  11.     echo  preg_replace("/(<a.*?>)(<img.*?>)(<\/a>)/"'\2'$str);   
  12. ?>  

PHP 常用正則表達(dá)式整理

表單驗(yàn)證匹配

驗(yàn)證賬號(hào),字母開(kāi)頭,允許 5-16 字節(jié),允許字母數(shù)字下劃線:^[a-zA-Z][a-zA-Z0-9_]{4,15}$

驗(yàn)證賬號(hào),不能為空,不能有空格,只能是英文字母:^\S+[a-z A-Z]$

驗(yàn)證賬號(hào),不能有空格,不能非數(shù)字:^\d+$

驗(yàn)證用戶密碼,以字母開(kāi)頭,長(zhǎng)度在 6-18 之間:^[a-zA-Z]\w{5,17}$

驗(yàn)證是否含有 ^%&',;=?$\ 等字符:[^%&',;=?$\x22]+

匹配Email地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配騰訊QQ號(hào):[1-9][0-9]{4,}

匹配日期,只能是 2004-10-22 格式:^\d{4}\-\d{1,2}-\d{1,2}$

匹配國(guó)內(nèi)電話號(hào)碼:^\d{3}-\d{8}|\d{4}-\d{7,8}$
評(píng)注:匹配形式如 010-12345678 或 0571-12345678 或 0831-1234567

匹配中國(guó)郵政編碼:^[1-9]\d{5}(?!\d)$

匹配身份證:\d{14}(\d{4}|(\d{3}[xX])|\d{1})
評(píng)注:中國(guó)的身份證為 15 位或 18 位

不能為空且二十字節(jié)以上:^[\s|\S]{20,}$


字符匹配

匹配由 26 個(gè)英文字母組成的字符串:^[A-Za-z]+$

匹配由 26 個(gè)大寫英文字母組成的字符串:^[A-Z]+$

匹配由 26 個(gè)小寫英文字母組成的字符串:^[a-z]+$

匹配由數(shù)字和 26 個(gè)英文字母組成的字符串:^[A-Za-z0-9]+$

匹配由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串:^\w+$

匹配空行:\n[\s| ]*\r

匹配任何內(nèi)容:[\s\S]*

匹配中文字符:[\x80-\xff]+ 或者 [\xa1-\xff]+

只能輸入漢字:^[\x80-\xff],{0,}$

匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]

匹配數(shù)字

只能輸入數(shù)字:^[0-9]*$

只能輸入n位的數(shù)字:^\d{n}$

只能輸入至少n位數(shù)字:^\d{n,}$

只能輸入m-n位的數(shù)字:^\d{m,n}$

匹配正整數(shù):^[1-9]\d*$

匹配負(fù)整數(shù):^-[1-9]\d*$

匹配整數(shù):^-?[1-9]\d*$

匹配非負(fù)整數(shù)(正整數(shù) + 0):^[1-9]\d*|0$

匹配非正整數(shù)(負(fù)整數(shù) + 0):^-[1-9]\d*|0$

匹配正浮點(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*)$

匹配浮點(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):^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

其他

匹配HTML標(biāo)記的正則表達(dá)式(無(wú)法匹配嵌套標(biāo)簽):<(\S*?)[^>]*>.*?</\1>|<.*? />

匹配網(wǎng)址 URL :[a-zA-z]+://[^\s]*

匹配 IP 地址:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)

匹配完整域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?

 

提示

  1. 上述正則表達(dá)式通常都加了 ^ 與 $ 來(lái)限定字符的起始和結(jié)束,如果需要匹配的內(nèi)容包括在字符串當(dāng)中,可能需要考慮去掉 ^ 和 $ 限定符。
  2. 以上正則表達(dá)式僅供參考,使用時(shí)請(qǐng)檢驗(yàn)后再使用


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多