導航:首頁 > 編程語言 > php正則表達式嵌套

php正則表達式嵌套

發布時間:2022-12-18 19:19:22

php正則表達式,如何不匹配某些字元

(?!......) 表示否定順序環視,子表達式不能匹配右側文本。

⑵ 如何使用php正則表達式提取ul和ol標簽里的內容比如li標簽的內容,並且標簽是嵌套的非常感謝

<?php
$str = '
<ul><li><a href="#">內容111</a></li><li><a href="#">內容111</a></li><li><a href="#">內容111</a></li><li><a href="#">內容111</a></li></ul>
<ol><li><a href="#">內容2</a></li><li><a href="#">內容2</a></li><li><a href="#">內容2</a></li><li><a href="#">內容12</a></li></ol>
';
$search = '/<ul>(.*?)<\/ul>/is';
preg_match_all($search,$str,$r,PREG_SET_ORDER );
print_r($r);
$search = '/<ol>(.*?)<\/ol>/is';
preg_match_all($search,$str,$r,PREG_SET_ORDER );
print_r($r);
?>

⑶ 如何用php正則表達式取出「字元」間的字元

PHP使用正則表達式提取字元串中尖括弧<>、小括弧()、中括弧[]、大括弧{}中的字元示例,需要的朋友可以參考下
復制代碼 代碼如下:
$str="你好<我>(愛)[北京]{天安門}";
echo f1($str); //返回你好
echo f2($str); //返回我
echo f3($str); //返回愛
echo f4($str); //返回北京
echo f5($str); //返回天安門
function f1($str)
{
$result = array();
preg_match_all("/^(.*)(?:<)/i",$str, $result);
return $result[1][0];
}
function f2($str)
{
$result = array();
preg_match_all("/(?:<)(.*)(?:>)/i",$str, $result);
return $result[1][0];
}
function f3($str)
{
$result = array();
preg_match_all("/(?:\()(.*)(?:\))/i",$str, $result);
return $result[1][0];
}
function f4($str)
{
$result = array();
preg_match_all("/(?:\[)(.*)(?:\])/i",$str, $result);
return $result[1][0];
}
function f5($str)
{
$result = array();
preg_match_all("/(?:\{)(.*)(?:\})/i",$str, $result);
return $result[1][0];
}
PS: (?:字元) 表示不捕獲這個字元。貌似PHP不支持將字元換成括弧。
否則的話可以將環視給嵌套進去,就可以循環匹配了。
PS2:環視:(?!) (?=) (?<!) (?<=)
有小於號的在右側匹配,沒有的在左側匹配。感嘆號表示不等,等於號表示相等。
PS3:都過了驗證器的驗證,驗證器見參考資料。

⑷ PHP 正則表達式總結

PHP 正則表達式總結

1.PHP中兩個常用的正則函數

a.preg_match 正則函數,以perl語言為基礎

語法:preg_match( mode,string subject,array matches)

說明:mode參數---- 正則的模塊,也就是正則表達式(語法)

subject參數---- 正則的內容

matches參數---- 正則的結果(獲得一個數組的形式)

b.ereg 正則函數,以POSIX基礎(Unix、Script)

語法:ereg(mode ,string subject, array regs)

2.正則表達式中包括的元素

a.原子(普通字元:a-z A-Z 0-9 、原子表、轉義字元)

b.元字元(有特殊功能的字元,如:# 、*)

c.模式修正符(系統內置部分字元 i、m、S、U ...)

3.正則表達式中的「原子」

a.a-z A-Z _ 0-9 //最常見的字元

b.(abc)(skd) //用圓括弧包含起來的單元符號(一個整體)

c.[abcs][^abd] //用方括弧包含的原子表,原子表中的^代表排除或相反的內容

d.轉義字元

d 包含所有的數字[0-9]

D 除所有數字外[^0-9]

w 包含所有英文字元[a-z A-Z 0-9]

W 除所有英文字元外[^a-z A-Z 0-9]

s 回車,換行等

......

註明: 圓括弧 必須是整體才能匹配; 方括弧 只要是其子集,都可以匹配(內容存在)

4.正則表達式元字元

* 匹配前一個內容的0次1次或多次

. 匹配內容的0次1次或多次,但不包含回車換行(代指自己,任何內容)

+ 匹配前一個內容的1次或多次

? 匹配前一個內容的.0次或1次

| 選擇匹配類似PHP中的| (因為這個運算符合是弱類型導致前面最為整體匹配,類似一個單詞匹配)

^ 匹配字元串首部內容

$ 匹配字元串尾部內容

b 匹配單詞邊界,邊界可以是空格或者特殊符合(有單詞分界符,類似空格)

B 匹配除帶單詞邊界意外內容(無單詞分界符)

{m} 匹配前一個內容的重復次數為M次

{m,} 匹配前一個內容的重復次數大於等於M次

{m,n} 匹配前一個內容的重復次數M次到N次

( ) 合並整體匹配,並放入內存,可使用1 2…依次獲取 (調用放入內存中的內容)

5.運算順序

依然遵循從左到→右的運算規則

優先順序:

( ) 圓括弧因為是內存處理所以最高

* ? + { } 重復匹配內容其次

^ $ b 邊界處理第三

| 條件處理第四

最後按照運算順序計算匹配

6.模式修正符

模式修正符是為正則表達式增強和補充的一個功能,使用在正則之外 例如:/ 正則 / U

常用修正符:

i 正則內容在匹配時候不區分大小寫(默認是區分的)

m 在匹配首內容或者尾內容時候採用多行識別匹配

s 將轉義回車取消是為單行匹配如. 匹配的時候

x 忽略正則中的空白

A 強制從頭開始匹配

D 強制$匹配尾部無任何內容 n

U 禁止貪婪匹配 只跟蹤到最近的一個匹配符並結束, 常用在採集程序上的正則表達式

7.匹配功能

preg_match_all 全部匹配函數

語法:preg_match_all ( string pattern, string subject, array matches [, int flags] )

說明:對結果排序使 $matches[0] 為全部模式匹配的數

用途:截取比較詳細的內容,採集網頁,分析文本

8.替換功能

preg_replace 正則替換函數

語法:preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit] )

說明:通過正則表達式來替換相關內容,類似之前學過的str_replace字元串替換,但 功能要強於它

提示:1、替換內容可以是一個正則也可以是數組正則

2、替換內容可以通過修正符e來解決替換執行內容

用途:替換一些比較復雜的內容上,也可以用於內容的轉換上

9.分割功能

preg_split 正則切割

語法:preg_split ( string pattern, string subject [, int limit [, int flags]] )

說明:通過正則表達式來切割相關內容,類似之前學過的explode切割函數,但explode 只能按照一種方式切割有局限性。

;

⑸ php 正則表達式 url匹配

1,preg_grep(pattern,array);它的返回值是一個新數組,新數組的元素是成功匹配的元素。

⑹ php 正則表達式 %<div align="center">(.*)</div>%si

%是定界符,兩個%內的內容是正則表達式,後面的si正則選項,s表示匹配多行(.可以匹配回車換行),i表示忽略大小寫

再看正則表達式部分:
<div align="center">(.*?)</div>

其功能是匹配<div align="center">開始到</div>結束的內容,裡面的(.*?)表示任意字元內容,括弧的功能是作為一個匹配項返回給調用程序,.表示任意字元,*為任意次重復,?表示不貪婪。

⑺ php 正則表達式 只能包含字母和數字

式子:/^[a-zA-Z0-9]+$/u

釋義:

"/":表示正則表達式的定義,固定寫法。

"^":表示開頭。

"[]":表示字元組。匹配所包含的任意一個字元。如,「[ab]」匹配「plain」中的「a」。

"a-z":表示匹配小寫字母a-z的字母範圍。

"A-Z":表示匹配大寫字母A-Z的字母範圍。

"0-9":表示匹配0-9的數字范圍。

"+":表示匹配次數大於等於1。

"$":匹配輸入行尾。如果設置了RegExp對象Multiline屬性,$也匹配「 」或「 」之前的位置。

"u":最後的u是模式修飾符,嚴格的說可能叫預定義常量。表示使用unicode進行匹配。

(7)php正則表達式嵌套擴展閱讀:

其它正則表達式符號的含義:

1、"*":匹配前面的子表達式任意次。例如,zo*能匹配「z」,也能匹配「zo」以及「zoo」。*等價於{0,}。

2、"?":匹配前面的子表達式零次或一次。例如,「do(es)?」可以匹配「do」或「does」。?等價於{0,1}。

3、"{n}":n是一個非負整數。匹配確定的n次。例如,「o{2}」不能匹配「Bob」中的「o」,但是能匹配「food」中的兩個o。

4、"{n,}":n是一個非負整數。至少匹配n次。例如,「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的所有o。「o{1,}」等價於「o+」。「o{0,}」則等價於「o*」。

5、"{n,m}":m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}」將匹配「fooooood」中的前三個o為一組,後三個o為一組。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。

⑻ PHP正則表達式限制日期范圍

繞彎路了把,把用戶輸入的時間格式用js做限定,然後傳到php頁面轉化為時間戳!再來比較!比如用戶輸入了1980-01-10 那麼傳到php頁面的話這么寫(僅供思路參考)

<?php
//...............你自己的代碼
$birthTime=strtotime($_POST['birthTime']);//將用戶輸入的日期轉化為時間戳
$startTime=strtotime('1985-01-01');//開始日期的時間戳
$endTime=strtotime('1995-12-31');//結束日期的時間戳
if($birthTime>=$startTime&&$birthTime<=$endTime){
echo'日起輸入是對的';
}else{
echo'日期非法';
}
?>

⑼ 史上最全的PHP正則表達式

一、校驗數字的表達式 

1 數字:

^[0-9]*$

2 n位的數字:

^\d{n}$

3 至少n位的數字:

^\d{n,}$

4 m-n位的數字:

^\d{m,n}$

5 零和非零開頭的數字:

^(0|[1-9][0-9]*)$

6 非零開頭的最多帶兩位小數的數字:

^([1-9][0-9]*)+(.[0-9]{1,2})?$

7 帶1-2位小數的正數或負數:

^(\-)?\d+(\.\d{1,2})?$

8 正數、負數、和小數:

^(\-|\+)?\d+(\.\d+)?$

9 有兩位小數的正實數:

^[0-9]+(.[0-9]{2})?$

10 有1~3位小數的正實數:

^[0-9]+(.[0-9]{1,3})?$

11 非零的正整數:

^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

12 非零的負整數:

^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$

13 非負整數:

^\d+$ 或 ^[1-9]\d*|0$

14 非正整數:

^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

15 非負浮點數:

^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

16 非正浮點數:

^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

17 正浮點數:

^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

18 負浮點數:

^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

19 浮點數:

^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

二、校驗字元的表達式

1 漢字:

^[\u4e00-\u9fa5]{0,}$

2 英文和數字:

^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

3 長度為3-20的所有字元:

^.{3,20}$

4 由26個英文字母組成的字元串:

^[A-Za-z]+$

5 由26個大寫英文字母組成的字元串:

^[A-Z]+$

6 由26個小寫英文字母組成的字元串:

^[a-z]+$

7 由數字和26個英文字母組成的字元串:

^[A-Za-z0-9]+$

8 由數字、26個英文字母或者下劃線組成的字元串:

^\w+$ 或 ^\w{3,20}$

9 中文、英文、數字包括下劃線:

^[\u4E00-\u9FA5A-Za-z0-9_]+$

10 中文、英文、數字但不包括下劃線等符號:

^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

11 可以輸入含有^%&',;=?$\"等字元:

[^%&',;=?$\x22]+

12 禁止輸入含有~的字元:

[^~\x22]+

三、特殊需求表達式

1、 Email地址:

^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

2 、域名:

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

3 、InternetURL:

[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

4 、手機號碼:

^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

5 、電話號碼("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):

^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$ 

6 國內電話號碼(0511-4405222、021-87888822):

\d{3}-\d{8}|\d{4}-\d{7}

7 、身份證號:

15或18位身份證:

^\d{15}|\d{18}$

15位身份證:

^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$

18位身份證:

^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$

8、 短身份證號碼(數字、字母x結尾):

^([0-9]){7,18}(x|X)?$



^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

9 、帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):

^[a-zA-Z][a-zA-Z0-9_]{4,15}$

10 、密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):

^[a-zA-Z]\w{5,17}$

11 、強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字元,長度在8-10之間):

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 

12、 日期格式:

^\d{4}-\d{1,2}-\d{1,2}

13、 一年的12個月(01~09和1~12):

^(0?[1-9]|1[0-2])$

14 、一個月的31天(01~09和1~31):

^((0?[1-9])|((1|2)[0-9])|30|31)$ 

15 、錢的輸入格式:

16 、1.有四種錢的表示形式我們可以接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":

^[1-9][0-9]*$ 

17、 2.這表示任意一個不以0開頭的數字,但是,這也意味著一個字元"0"不通過,所以我們採用下面的形式:

^(0|[1-9][0-9]*)$ 

18 、3.一個0或者一個不以0開頭的數字.我們還可以允許開頭有一個負號:

^(0|-?[1-9][0-9]*)$ 

19 、4.這表示一個0或者一個可能為負的開頭不為0的數字.讓用戶以0開頭好了.把負號的也去掉,因為錢總不能是負的吧.下面我們要加的是說明可能的小數部分:

^[0-9]+(.[0-9]+)?$ 

20 、5.必須說明的是,小數點後面至少應該有1位數,所以"10."是不通過的,但是 "10" 和 "10.2" 是通過的:

^[0-9]+(.[0-9]{2})?$ 

21、 6.這樣我們規定小數點後面必須有兩位,如果你認為太苛刻了,可以這樣:

^[0-9]+(.[0-9]{1,2})?$ 

22、 7.這樣就允許用戶只寫一位小數.下面我們該考慮數字中的逗號了,我們可以這樣:

^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$ 

23 、8.1到3個數字,後面跟著任意個 逗號+3個數字,逗號成為可選,而不是必須:

^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$ 

24 、備註:這就是最終結果了,別忘了"+"可以用"*"替代如果你覺得空字元串也可以接受的話(奇怪,為什麼?)最後,別忘了在用函數時去掉去掉那個反斜杠,一般的錯誤都在這里

25 、xml文件:

^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$

26 、中文字元的正則表達式:

[\u4e00-\u9fa5]

27 、雙位元組字元:

[^\x00-\xff]

(包括漢字在內,可以用來計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1))

28 、空白行的正則表達式:\n\s*\r (可以用來刪除空白行)

29 、HTML標記的正則表達式:

<(\S*?)[^>]*>.*?|<.*? /> (網上流傳的版本太糟糕,上面這個也僅僅能部分,對於復雜的嵌套標記依舊無能為力)

30 、首尾空白字元的正則表達式:^\s*|\s*$或(^\s*)|(\s*$) (可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表達式)

31 、騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始)

32 、中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼為6位數字)

33、 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址時有用)

⑽ PHP正則表達式提取字元串中尖括弧<>、小括弧()、中括弧[]、大括弧{}中的字元

1、
function f1($str)
{
$result = array();
preg_match_all("/^(.*)(?:<)/i",$str, $result);
return $result[1][0];
}
2、
function f2($str)
{
$result = array();
preg_match_all("/(?:<)(.*)(?:>)/i",$str, $result);
return $result[1][0];
}
3、
function f3($str)
{
$result = array();
preg_match_all("/(?:\()(.*)(?:\))/i",$str, $result);
return $result[1][0];
}
4、
function f4($str)
{
$result = array();
preg_match_all("/(?:\[)(.*)(?:\])/i",$str, $result);
return $result[1][0];
}
5、
function f5($str)
{
$result = array();
preg_match_all("/(?:\{)(.*)(?:\})/i",$str, $result);
return $result[1][0];
}

PS: (?:字元) 表示不捕獲這個字元。貌似PHP不支持將字元換成括弧。
否則的話可以將環視給嵌套進去,就可以循環匹配了。
PS2:環視:(?!) (?=) (?<!) (?<=)
有小於號的在右側匹配,沒有的在左側匹配。感嘆號表示不等,等於號表示相等。
PS3:都過了驗證器的驗證,驗證器見參考資料。

閱讀全文

與php正則表達式嵌套相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163