成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

php正則匹配提取數(shù)據(jù) php正則匹配html標(biāo)簽內(nèi)容

PHP中提取字符串--正則

PHP中的正則式使用

在渭城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營(yíng)銷(xiāo)推廣,外貿(mào)網(wǎng)站制作,渭城網(wǎng)站建設(shè)費(fèi)用合理。

PHP被大量的應(yīng)用于Web的后臺(tái)CGI開(kāi)發(fā),通常是在用戶數(shù)據(jù)數(shù)據(jù)之后得出某種結(jié)果,但是如果用戶輸入的數(shù)據(jù)不正確,就會(huì)出現(xiàn)問(wèn)題,比如說(shuō)某人的生日是”2月30日”!那應(yīng)該怎么樣來(lái)檢驗(yàn)暑假是否正確呢? 在PHP中加入了正則表達(dá)式的支持,讓我們可以十分方便的進(jìn)行數(shù)據(jù)匹配。

2 什么是正則表達(dá)式:

簡(jiǎn)單的說(shuō),正則表達(dá)式是一種可以用于模式匹配和替換的強(qiáng)大工具。在幾乎所有的基于UNIX/LINUX系統(tǒng)的軟件工具中找到正則表達(dá)式的痕跡,例如:Perl或PHP腳本語(yǔ)言。此外,JavaScript這種客戶端的腳本語(yǔ)言也提供了對(duì)正則表達(dá)式的支持,現(xiàn)在正則表達(dá)式已經(jīng)成為了一個(gè)通用的概念和工具,被各類(lèi)技術(shù)人員所廣泛使用。

在某個(gè)Linux網(wǎng)站上面有這樣的話:”如果你問(wèn)一下Linux愛(ài)好者最喜歡什么,他可能會(huì)回答正則表達(dá)式;如果你問(wèn)他最害怕什么,除了繁瑣的安裝配置外他肯定會(huì)說(shuō)正則表達(dá)式。”

正如上面說(shuō)的,正則表達(dá)式看起來(lái)非常復(fù)雜,讓人害怕,大多數(shù)的PHP初學(xué)者都會(huì)跳過(guò)這里,繼續(xù)下面的學(xué)習(xí),但是PHP中的正則表達(dá)式有著可以利用模式匹配找到符合條件的字符串、判斷字符串是否合乎條件或者用指定的字符串來(lái)替代符合條件的字符串等強(qiáng)大的功能,不學(xué)實(shí)在太可惜了……

3 正則表達(dá)式的基本語(yǔ)法:

一個(gè)正則表達(dá)式,分為三個(gè)部分:分隔符,表達(dá)式和修飾符。

分隔符可以是除了特殊字符以外的任何字符(比如”/ !”等等),常用的分隔符是”/”。表達(dá)式由一些特殊字符(特殊字符詳見(jiàn)下面)和非特殊的字符串組成,比如”[a-z0-9_-]+@[a-z0-9_-.]+”可以匹配一個(gè)簡(jiǎn)單的電子郵件字符串。修飾符是用來(lái)開(kāi)啟或者關(guān)閉某種功能/模式。下面就是一個(gè)完整的正則表達(dá)式的例子:

/hello.+?hello/is

上面的正則表達(dá)式”/”就是分隔符,兩個(gè)”/”之間的就是表達(dá)式,第二個(gè)”/”后面的字符串”is”就是修飾符。

在表達(dá)式中如果含有分隔符,那么就需要使用轉(zhuǎn)義符號(hào)”",比如”/hello.+?/hello/is”。轉(zhuǎn)義符號(hào)除了用于分隔符外還可以執(zhí)行特殊字符,全部由字母構(gòu)成的特殊字符都需要”"來(lái)轉(zhuǎn)義,比如”d”代表全體數(shù)字。

4 正則表達(dá)式的特殊字符:

正則表達(dá)式中的特殊字符分為元字符、定位字符等等。

元字符是正則表達(dá)式中一類(lèi)有特殊意義的字符,用來(lái)描述其前導(dǎo)字符(即元字符前面的字符)在被匹配的對(duì)象中出現(xiàn)的方式。元字符本身是一個(gè)個(gè)單一的字符,但是不同或者相同的元字符組合起來(lái)可以構(gòu)成大的元字符。

元字符:

大括號(hào):大括號(hào)用來(lái)精確指定匹配元字符出現(xiàn)的次數(shù),例如”/pre{1,5}/”表示匹配的對(duì)象可以是”pre”、”pree”、”preeeee”這樣在”pr”后面出現(xiàn)1個(gè)到5個(gè)”e”的字符串?;蛘摺?pre{,5}/”代表pre出現(xiàn)0此到5次之間。

加號(hào):”+”字符用來(lái)匹配元字符前的字符出現(xiàn)一次或者多次。例如”/ac+/”表示被匹配的對(duì)象可以是”act”、”account”、”acccc”等在”a”后面出現(xiàn)一個(gè)或者多個(gè)”c”的字符串?!?”相當(dāng)于”{1,}”。

星號(hào):”*”字符用來(lái)匹配元字符前的字符出現(xiàn)零次或者多次。例如”/ac*/”表示被匹配的對(duì)象可以是”app”、”acp”、”accp”等在”a”后面出現(xiàn)零個(gè)或者多個(gè)”c”的字符串?!?”相當(dāng)于”{0,}”。

問(wèn)號(hào):”?”字符用來(lái)匹配元字符前的字符出現(xiàn)零次或者1次。例如”/ac?/”表示匹配的對(duì)象可以是”a”、”acp”、”acwp”這樣在”a”后面出現(xiàn)零個(gè)或者1個(gè)”c”的字符串?!?”在正則表達(dá)式中還有一個(gè)非常重要的作用,即”貪婪模式”。

還有兩個(gè)很重要的特殊字符就是”[ ]“。他們可以匹配”[]“之中出現(xiàn)過(guò)的字符,比如”/[az]/”可以匹配單個(gè)字符”a”或者”z”;如果把上面的表達(dá)式改成這樣”/[a-z]/”,就可以匹配任何單個(gè)小寫(xiě)字母,比如”a”、”b”等等。

如果在”[]“中出現(xiàn)了”^”,代表本表達(dá)式不匹配”[]“內(nèi)出現(xiàn)的字符,比如”/[^a-z]/”不匹配任何小寫(xiě)字母!并且正則表達(dá)式給出了幾種”[]“的默認(rèn)值:

[:alpha:]:匹配任何字母

[:alnum:]:匹配任何字母和數(shù)字

[:digit:]:匹配任何數(shù)字

[:space:]:匹配空格符

[:upper:]:匹配任何大寫(xiě)字母

[:lower:]:匹配任何小寫(xiě)字母

[:punct:]:匹配任何標(biāo)點(diǎn)符號(hào)

[:xdigit:]:匹配任何16進(jìn)制數(shù)字

另外下面這些特殊字符在轉(zhuǎn)義符號(hào)”"轉(zhuǎn)義后代表的含義如下:

s:匹配單個(gè)的空格符

S:用于匹配除單個(gè)空格符之外的所有字符。

d:用于匹配從0到9的數(shù)字,相當(dāng)于”/[0-9]/”。

w:用于匹配字母,數(shù)字或下劃線字符,相當(dāng)于”/[a-zA-Z0-9_]/”。

W:用于匹配所有與w不匹配的字符,相當(dāng)于”/[^a-zA-Z0-9_]/”。

D:用于匹配任何非10進(jìn)制的數(shù)字字符。

.:用于匹配除換行符之外的所有字符,如果經(jīng)過(guò)修飾符”s”的修飾,”.”可以代表任意字符。

利用上面的特殊字符可以很方便的表達(dá)一些比較繁瑣的模式匹配。例如”/d0000/”利用上面的正則表達(dá)式可以匹配萬(wàn)以上,十萬(wàn)一下的整數(shù)字符串。

定位字符:

定位字符是正則表達(dá)式中又一類(lèi)非常重要的字符,它的主要作用是用于對(duì)字符在匹配對(duì)象中的位置進(jìn)行描述。

^:表示匹配的模式出現(xiàn)在匹配對(duì)象的開(kāi)頭(和在”[]“里面不同)

$:表示匹配的模式出現(xiàn)在匹配對(duì)象的末尾

空格:表示匹配的模式出現(xiàn)在開(kāi)始和結(jié)尾的兩個(gè)邊界之一

“/^he/”:可以匹配以”he”字符開(kāi)頭的字符串,比如hello、height等等;

“/he$/”:可以匹配以”he”字符結(jié)尾的字符串即she等;

“/ he/”:空格開(kāi)頭,和^的作用一樣,匹配以he開(kāi)頭的字符串;

“/he /”:空格結(jié)束,和$的作用一樣,匹配以he結(jié)尾的字符串;

“/^he$/”:表示只和字符串”he”匹配。

括號(hào):

正則表達(dá)式除了可以用戶匹配,還可以用括號(hào)”()”來(lái)記錄需要的信息,儲(chǔ)存起來(lái),給后面的表達(dá)式讀取。比如:

/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)(.[a-zA-Z0-9_-])$/

就是記錄郵件地址的用戶名,和郵件地址的服務(wù)器地址(形式為username@server.com之類(lèi)的),在后面如果想要讀取記錄下來(lái)的字符串,只是需要用”轉(zhuǎn)義符+記錄的次序”來(lái)讀取。比如”1〃就相當(dāng)于第一個(gè)”[a-zA-Z0-9_-]+”,”2〃相當(dāng)于第二個(gè)([a-zA-Z0-9_-]+),”3〃就是第三個(gè)(.[a-zA-Z0-9_-])。但是在PHP中,”"是一個(gè)特殊的字符,需要轉(zhuǎn)義,所以”"到了PHP的表達(dá)式中就應(yīng)該寫(xiě)成”1〃。

其他特殊符號(hào):

“|”:或符號(hào)”|”和PHP里面的或一樣,不過(guò)是一個(gè)”|”,而不是PHP的兩個(gè)”||”!意思就是可以是某個(gè)字符或者另一個(gè)字符串,比如”/abcd|dcba/”可能匹配”abcd”或者”dcba”。

5 貪婪模式:

前面在元字符中提到過(guò)”?”還有一個(gè)重要的作用,即”貪婪模式”,什么是

php preg_match_all 正則提取數(shù)據(jù)后問(wèn)題print_r($contents);

preg_match_all

匹配之后的結(jié)果是一個(gè)數(shù)組,echo

不能打印數(shù)組,你可以從數(shù)組中找到你要的數(shù)據(jù)在哪個(gè)鍵值然后

echo

$contents[$n];

php 正則 怎么獲取數(shù)據(jù)

現(xiàn)獲取此div的html串,然后處理。

例如:

ul

liMa hrMef="hMtMtp://xxx1" tarMget="_blaMnk" claMss=""/Ma/li

liMa hrMef="hMtMtp://xxx2" targMet="_blaMnk" claMss=""/Ma/li

/ul

正則:hMtMtp.+?(?=".+/a.*/li)

輸出:

hMtMtp://xxx1

hMtMtp://xxx2

(把上面大寫(xiě)的M都去掉)

PHP正則提取 DIV CLASS 數(shù)據(jù)

用PHP正則表達(dá)式匹配,就可以提取class里面的數(shù)據(jù),并將no去除,完整的PHP程序如下

?php

$str='div?class="lot-nums"span?class="no7"/spanspan?class="no8"/spanspan?class="no5"/spanspan?class="no9"/spanspan?class="no2"/spanspan?class="no4"/spanspan?class="no6"/spanspan?class="no0"/spanspan?class="no3"/span?span?class="no1"/span/div';?

$regex='/span?class="no(\d+)"/i';?

preg_match_all($regex,$str,$result);?

print_r($result[1]);?

?

運(yùn)行結(jié)果

php正則提取

可用如下的代碼來(lái)實(shí)現(xiàn):

?php

$str1="|1234|#2354#@2314@

|1314|#2154#@2214@

|1234|#2354#@2314@

|1314|#2154#@2214@";

if(preg_match_all("/\|(\d{4})\|\#(\d{4})\#\@(\d{4})\@/m",$str1,?$out,?PREG_PATTERN_ORDER))

for($i=0;$icount($out[0]);$i++)

{

echo?"{'".$out[1][$i]."','".$out[2][$i]."','".$out[2][$i]."'}br/";

}

?

效果如下所示:

{'1234','2354','2354'}

{'1314','2154','2154'}

{'1234','2354','2354'}

{'1314','2154','2154'}

PHP正則提取中文部分內(nèi)容,怎么實(shí)現(xiàn)呀?

中文可以用正則表達(dá)式進(jìn)行匹配,但是具體匹配方法與中文的編碼方式有關(guān):

如果是GBK(GB2312、GB1080),那么中文的編碼范圍是:

\x80-\xff

如果是UTF-8編碼,那么中文的編碼范圍是:

\u4e00-\u9fa5

那么匹配漢字的正則表達(dá)式可以是:

/[\x7f-\xff]+/

或者

/[\u4e00-\u9fa5]+/

例子代碼,顯示文件中的所有漢字(GBK編碼):

?php

$s=file_get_contents('1.txt');

if?(preg_match_all('/[\x7f-\xff]+/',?$s,?$r)){

for?($i=1;$icount($r[0]);$i++)?echo?"$i\t".$r[0][$i]."\n";

}

?

分享文章:php正則匹配提取數(shù)據(jù) php正則匹配html標(biāo)簽內(nèi)容
分享地址:http://jinyejixie.com/article26/dochojg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站搜索引擎優(yōu)化、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
朝阳区| 南昌市| 沛县| 和硕县| 留坝县| 崇信县| 睢宁县| 托克托县| 双峰县| 衡水市| 娄烦县| 景泰县| 松江区| 乌审旗| 会理县| 新昌县| 宜宾市| 抚远县| 镇坪县| 襄樊市| 山阳县| 神池县| 东平县| 阿克陶县| 南平市| 富源县| 云南省| 德令哈市| 江陵县| 临朐县| 神农架林区| 昭苏县| 观塘区| 罗平县| 思茅市| 安陆市| 济宁市| 依兰县| 育儿| 河源市| 萝北县|