真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

正則表達(dá)式及php中的正則函數(shù)

正則表達(dá)式 (regular expression), 常簡寫為 regex, 用于在字符串中進(jìn)行比較復(fù)雜的匹配

成都創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元北票做網(wǎng)站,已為上家服務(wù),為北票各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792

perl 和 ereg

現(xiàn)有兩種類型的正則表達(dá)式 perl 和 POSIX, perl 類型 更規(guī)范,執(zhí)行效率越高, POSIX 類型常用于 Unix

php 提供了兩套正則表達(dá)式函數(shù)庫

preg_ 系列以 perl 為基礎(chǔ)

ereg_ 系列以 POSIX 為基礎(chǔ)

preg_ 系列更常用,ereg_ 將要被淘汰


原子

基本字符

ASCII碼中,除了下面要介紹的字符之外的,所有字符。基本字符與下面要介紹的各種特殊字符與模式結(jié)合使用,就形成了所謂的正則表達(dá)式。

單元符號 ()

圓括號中的基本字符在匹配時被看做一個整體。

正則匹配
(abc)abc

該整體會保存在內(nèi)存中,可作為整體獲取,例如 "/go(abc)g\\1le/" 可以匹配 goabcgabcle, \\1 對應(yīng)了 abc。

這種方法可用于匹配不同格式的日期 "/2014(.*)06\1(13)/" 可匹配 2014/06/13 或 2014-06-13 , 但不可匹配 2014-06/13 。這里 \\1(13) 如不加括號會被認(rèn)為內(nèi)存中的第 113 號。

也可以用模式修飾符 x 實現(xiàn) "/2014(.*)06\1 13/x",

原子表 []

與單元符號相反,原子表用于匹配其中的中任意一個原子。

正則匹配
[abc]a 或 b 或 c

原子表中 x-y 匹配 x 到 y 范圍內(nèi)的字符, 常見用法如下

正則匹配
[0-9]所有數(shù)字
[a-z]所有小寫字母
[A-z]所有大寫字母
[a-zA-z]所有字母

需要注意的是 ^ 符號在原子表中表示排除,而在元字符中表示開頭

正則匹配
[^abc]除了abc外的字符
[^0-9]所有 數(shù)字

轉(zhuǎn)義字符

轉(zhuǎn)義字符就是一些常用原子表表達(dá)式的簡寫

轉(zhuǎn)義字符匹配原子表表示
\d所有數(shù)字[0-9]
\D除所有數(shù)字外[^0-9]
\w所有字母加數(shù)字加下劃線[a-zA-Z0-9_]
\W除字母數(shù)字下劃線之外的字符[^a-zA-Z0-9_]
\s匹配空白(Tab,空格,換頁,換行)[\f\v\t\r\n]
\S匹配非空白[^\f\v\t\r\n]

元字符 metacharacter

字符匹配
.匹配除換行符以外的任意字符
*匹配前一個內(nèi)容的0次或1次或多次
+匹配前一個內(nèi)容的1次或多次
?匹配0次或1次
|邏輯符 “或”
^匹配字符串首部內(nèi)容,加在原子前, 例如 ^abc
$匹配字符串尾部部內(nèi)容, 加在原子后, 例如 abc$
\b通過邊界匹配單詞,邊界為空格或特殊符號, \bis\b 用于匹配 is 單詞
\B通過邊界匹配單詞以外內(nèi)容
{m}匹配前一個內(nèi)容的m次
{m,}匹配前一個內(nèi)容的大于等于m次
{m,n}匹配前一個內(nèi)容的m到n次

運算順序

從高到底

  • ()

  • * ? + {}

  • ^ $ \b

  • |

  • 基本字符


模式修飾符

模式修飾符在正則之外使用,格式為 /正則/U, U 代表模式修飾符

修飾符用法
i匹配時不區(qū)分大小寫 (默認(rèn)區(qū)分)
m匹配首內(nèi)容和尾內(nèi)容時采用多行識別(默認(rèn)^和$匹配整個段落的開頭和結(jié)尾,加了m之后變?yōu)樾惺缀托形玻?/td>
s將回車轉(zhuǎn)義取消,這樣 .* 就可以匹配所有內(nèi)容
x忽略正則表達(dá)式中的空白
A強(qiáng)制從段落頭開始匹配 "/xxx/mA" 相當(dāng)于沒有加 m
D強(qiáng)制從段落尾開始匹配 (此外,由于默認(rèn) $ 會從行尾的 \n 之前開始匹配,D還用來在尾部從 \n 開始)
U禁止貪婪匹配,匹配到第一個符合條件的部分就停止,常用于采集程序

正則表達(dá)式應(yīng)用

用途正則表達(dá)式
判斷email地址^[a-zA-Z0-9_-.]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$
判斷日期[0-9]{2-4}(.*)[0-9]{0,2}\\1[0-9]{0,2}
非負(fù)整數(shù)(正整數(shù)+0)^[0-9]+$
正整數(shù)^[0-9]*[1-9]+[0-9]*$
非正整數(shù)(負(fù)整數(shù)+0)^(-[1-9]+|(0))$
負(fù)整數(shù)^-[0-9]+$

PHP preg_ 系列函數(shù)

preg_match

執(zhí)行一個正則表達(dá)式匹配,沒什么可多說的,例子如下

$subject = "標(biāo)題: {title}
作者: {author}
內(nèi)容: {con}"; $pattern = ("/{(.*)}/U"); preg_match($pattern, $subject, $matches); print_r($matches);

輸出

Array ( [0] => {title} [1] => title )

這里只匹配了一個就停止了是因為我們加了模式修飾符 U

preg_match_all

與 preg_match 的區(qū)別在于,preg_match_all 在第一個匹配找到后,從結(jié)束位置繼續(xù)進(jìn)行搜索,使用相同的目標(biāo)字符和正則表達(dá)式

$subject = "標(biāo)題: {title}
作者: {author}
內(nèi)容: {con}"; $pattern = ("/{(.*)}/U"); preg_match_all($pattern, $subject, $matches); print_r($matches);

輸出結(jié)果如下

Array
(
    [0] => Array
        (
            [0] => {title}
            [1] => {author}
            [2] => {con}
        )

    [1] => Array
        (
            [0] => title
            [1] => author
            [2] => con
        )

)

preg_replace

用給定內(nèi)容替換正則表達(dá)式匹配的內(nèi)容,并返回修改后的字符串,以下是一個實現(xiàn)非常簡單的類 smarty 模板例子

$subject = "標(biāo)題: {title}
作者: {author}
內(nèi)容: {con}"; $pattern = array("/{title}/", "/{author}/", "/{con}/"); $replacement = array("Myregex", "gipanda", "simplesmarty"); echo preg_replace($pattern, $replacement, $subject);

輸出

標(biāo)題: Myregex
作者: gipanda
內(nèi)容: simplesmarty

preg_replace 與 e 模式修正符

模式修正符 e 用于執(zhí)行 replacement 中的內(nèi)容

$subject = "test a test";

$pattern = ("/(a)/e");

echo preg_replace($pattern, "md5('\\1')", $subject);

輸出

test 0cc175b9c0f1b6a831c399e269772661 test

不加模式修正符 e 會輸出

test md5('a') test

md5() 沒有被當(dāng)做函數(shù)執(zhí)行

preg_split

按給定正則(一般式原子表)分割字符串


新聞名稱:正則表達(dá)式及php中的正則函數(shù)
URL網(wǎng)址:http://weahome.cn/article/gegjij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部