最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP正則之正向預(yù)查與反向預(yù)查講解與實例

 更新時間:2020年04月06日 09:12:16   作者:追風(fēng)的浪子  
這篇文章主要介紹了PHP正則之正向預(yù)查與反向預(yù)查詳解與實例,需要的朋友可以參考下

了解正向預(yù)查&反向預(yù)查前,我們先要知道正則的2個函數(shù):preg_match_all 、 preg_replace

正向預(yù)查&反向預(yù)查

正向或反向預(yù)查都是非獲取匹配,不進(jìn)行存儲供以后使用。

1、正向預(yù)查

(?:pattern) 匹配結(jié)果

(?=pattern) 正向匹配

(?!pattern) 正向不匹配

2、反向預(yù)查

(?<=pattern) 反向匹配。

(?<!pattern) 反向不匹配。

什么叫非獲取匹配(非捕獲匹配),請看例子

一:PHP正則正向預(yù)查實例

PHP獲取匹配實例

$str = 'XXXXjava6java7XXXX';
$perg = "/java(6|7)/"; //匹配java6 獲取 java

preg_match_all($perg, $str, $matchs);
$str1 = preg_replace($perg, '\0', $str); //"XXXXjava6java7XXXX"
$str2 = preg_replace($perg, '\1', $str); //"XXXX67XXXX"

$matchs輸出結(jié)果:

array(2) {
 [0]=>
 array(2) {
  [0]=>
  string(5) "java6"
  [1]=>
  string(5) "java7"
 }
 [1]=>
 array(2) {
  [0]=>
  string(1) "6"
  [1]=>
  string(1) "7"
 }
}

$str1輸出結(jié)果:

string(18) "XXXXjava6java7XXXX"

$str2輸出結(jié)果:

string(10) "XXXX67XXXX"

知道了preg_match_all的用法,對于上面的輸出結(jié)果應(yīng)該很清楚,[n]的后向引用。 [0]中保存的是匹配結(jié)果的全文,數(shù)組的個數(shù)=匹配到結(jié)果的個數(shù),[1] 中保存的匹配結(jié)果中對應(yīng)括號中匹配的結(jié)果(子組),.....[n]第n個括號中的匹配內(nèi)容。

preg_replace 中的 \0,\1,也是對匹配結(jié)果的引用。

$str1 = preg_replace($perg, '\0', $str); //"XXXXjava6java7XXXX", 用全文中的匹配結(jié)果進(jìn)行對應(yīng)替換

$str2 = preg_replace($perg, '\1', $str); //"XXXX67XXXX",用括號中的子結(jié)果進(jìn)行對應(yīng)的替換

我們對比知道,\0 的替換內(nèi)容,是匹配全文的中內(nèi)容,對應(yīng)元素的替換。

PHP匹配結(jié)果實例

$str = 'XXXXjava6java7XXXX';
$perg = "/java(?:6|7)/"; 
 
preg_match_all($perg, $str, $matchs);
$str1 = preg_replace($perg, '\0', $str); //"XXXXjava6java7XXXX"

$match 輸出結(jié)果:

array(1) {
 [0]=>
 array(2) {
  [0]=>
  string(5) "java6"
  [1]=>
  string(5) "java7"
 }
}

$str1輸出結(jié)果:

string(18) "XXXXjava6java7XXXX"

對比例1中,我們發(fā)現(xiàn)沒有括號匹配的結(jié)果,這就是我們說的非獲取匹配,只匹配全本結(jié)果,不捕獲括號中的子結(jié)果。

php正向匹配實例

$str = 'XXXXjava6java7XXXX';
$perg = "/java(?=6|7)/";

preg_match_all($perg, $str, $matchs);
$str1 = preg_replace($perg, '\0', $str); //"XXXXjava6java7XXXX"
var_dump($matchs, $str1);
die;

輸出結(jié)果:

array(1) {
 [0]=>
 array(2) {
  [0]=>
  string(4) "java"
  [1]=>
  string(4) "java"
 }
}
string(18) "XXXXjava6java7XXXX"

相比上面的我們匹配的結(jié)果中沒有 6,7

PHP正向不匹配實例

$str = 'XXXXjava6java7XXXX';
$perg = "/java(?!6)/"; //不匹配java6

preg_match_all($perg, $str, $matchs);
$str1 = preg_replace($perg, '', $str); //"XXXXjava67XXXX"
var_dump($matchs, $str1);
die;

輸出結(jié)果:

array(1) {
 [0]=>
 array(1) {
  [0]=>
  string(4) "java"
 }
}
string(14) "XXXXjava67XXXX"

這里匹配的到結(jié)果是java7,但是由于我們用了非獲取匹配,就不存貯7,剩下的就是java了

主要:不管是怎么替換,如果我們只要用的是 \0(完整匹配結(jié)果) 中的結(jié)果進(jìn)行替換,相當(dāng)于匹配到了什么就替換掉原字符串中的什么,實際上原字符串沒變化,

二 . 反向預(yù)查

(?<=pattern) 反向匹配。(?<=J)a,匹配緊跟字母J后面的a,結(jié)果Java6 Java

(?<!pattern) 反向不匹配。(?<!J)a,不匹配緊跟字母J后面的a,結(jié)果Java6 Java

PHP反向預(yù)查實例

$str = 'XXXXjava6java7XXXX';
$perg = "/(?<!6)java/"; //不匹配前端有6的java

preg_match_all($perg, $str, $matchs);
$str1 = preg_replace($perg, '', $str); //"XXXX6java7XXXX"
var_dump($matchs, $str1);
die;

輸出結(jié)果:

array(1) {
 [0]=>
 array(1) {
  [0]=>
  string(4) "java"
 }
}
string(14) "XXXX6java7XXXX"

總結(jié):

正向預(yù)查,反向預(yù)查,就是方向不同。
正向預(yù)查時,具體字符串在左邊,/java(?:6|7)/,從字符串開始向右查找;
反向則在右邊: / (?<!J)a /,從字符串向反方向(左)查找。

更多關(guān)于PHP正則使用技巧請查看下面的相關(guān)鏈接

相關(guān)文章

  • 深入PHP許愿墻模塊功能分析

    深入PHP許愿墻模塊功能分析

    本篇文章是對PHP實現(xiàn)許愿墻的模塊功能進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP實現(xiàn)的下載遠(yuǎn)程圖片自定義函數(shù)分享

    PHP實現(xiàn)的下載遠(yuǎn)程圖片自定義函數(shù)分享

    這篇文章主要介紹了PHP實現(xiàn)的下載遠(yuǎn)程圖片自定義函數(shù)分享,本文直接給出實現(xiàn)代碼和,本文直接給出實現(xiàn)代碼和使用方法,需要的朋友可以參考下
    2015-01-01
  • 淺談PHP模擬發(fā)送POST請求之curl基本使用

    淺談PHP模擬發(fā)送POST請求之curl基本使用

    今天來介紹PHP模擬發(fā)送POST請求的重型武器——cURL函數(shù)庫的使用和其多線程的優(yōu)化方法。說起cURL函數(shù),可謂是老生常談,但網(wǎng)上許多資料都在關(guān)鍵部分語焉不詳,于是筆者翻了些資料,結(jié)合自己的筆記,總結(jié)了這篇文章,希望能給初次接觸cURL的開發(fā)者提供一些幫助。
    2021-05-05
  • php編程每天必學(xué)之表單驗證

    php編程每天必學(xué)之表單驗證

    php編程每天必學(xué)之表單驗證,針對php表單處理進(jìn)行學(xué)習(xí)研究,以一個完整例子實現(xiàn)了php表單驗證,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 如何在PHP環(huán)境中使用ProtoBuf數(shù)據(jù)格式

    如何在PHP環(huán)境中使用ProtoBuf數(shù)據(jù)格式

    這篇文章主要介紹了如何在PHP環(huán)境中使用ProtoBuf數(shù)據(jù)格式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • PHP日期時間函數(shù)的高級應(yīng)用技巧

    PHP日期時間函數(shù)的高級應(yīng)用技巧

    PHP的日期時間函數(shù)date()中介紹了PHP日期時間函數(shù)的簡單用法,這類將介紹更多的函數(shù)來豐富我們的應(yīng)用。
    2009-05-05
  • php簡單生成一組與多組隨機(jī)字符串的方法

    php簡單生成一組與多組隨機(jī)字符串的方法

    這篇文章主要介紹了php簡單生成一組與多組隨機(jī)字符串的方法,涉及php基于rand方法的隨機(jī)字符串相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • PHP中的多種加密技術(shù)及代碼示例解析

    PHP中的多種加密技術(shù)及代碼示例解析

    php的加密技術(shù)有很多種,很多人一不小心就會搞混,所以今天就花點時間說說PHP中的信息加密技術(shù).有需要的朋友可以了解一下。
    2016-10-10
  • php微信公眾平臺開發(fā)類實例

    php微信公眾平臺開發(fā)類實例

    這篇文章主要介紹了php微信公眾平臺開發(fā)類,實例分析了針對微信消息的響應(yīng)、回復(fù)、編碼等相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • PHP跨平臺獲取服務(wù)器IP地址自定義函數(shù)分享

    PHP跨平臺獲取服務(wù)器IP地址自定義函數(shù)分享

    這篇文章主要介紹了PHP跨平臺獲取服務(wù)器IP地址自定義函數(shù)分享,本文函數(shù)會根據(jù)系統(tǒng)類型選擇不同的命令來獲取服務(wù)器的IP地址,需要的朋友可以參考下
    2014-12-12

最新評論

衢州市| 安化县| 平江县| 丹巴县| 澎湖县| 静安区| 宣汉县| 阿克陶县| 通城县| 偏关县| 岑溪市| 孟连| 南召县| 银川市| 曲水县| 东港市| 临桂县| 莱芜市| 安宁市| 灵台县| 南皮县| 江阴市| 军事| 曲麻莱县| 阿鲁科尔沁旗| 龙川县| 巴南区| 盐津县| 安塞县| 阿图什市| 成都市| 肥西县| 瑞昌市| 衢州市| 西宁市| 措勤县| 岳池县| 逊克县| 嵩明县| 故城县| 延川县|