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

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

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

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

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

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

1、正向預(yù)查

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

(?=pattern) 正向匹配

(?!pattern) 正向不匹配

2、反向預(yù)查

(?<=pattern) 反向匹配。

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

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

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

PHP獲取匹配實(shí)例

$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的用法,對(duì)于上面的輸出結(jié)果應(yīng)該很清楚,[n]的后向引用。 [0]中保存的是匹配結(jié)果的全文,數(shù)組的個(gè)數(shù)=匹配到結(jié)果的個(gè)數(shù),[1] 中保存的匹配結(jié)果中對(duì)應(yīng)括號(hào)中匹配的結(jié)果(子組),.....[n]第n個(gè)括號(hào)中的匹配內(nèi)容。

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

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

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

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

PHP匹配結(jié)果實(shí)例

$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"

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

php正向匹配實(shí)例

$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正向不匹配實(shí)例

$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)于匹配到了什么就替換掉原字符串中的什么,實(shí)際上原字符串沒變化,

二 . 反向預(yù)查

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

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

PHP反向預(yù)查實(shí)例

$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ù)查時(shí),具體字符串在左邊,/java(?:6|7)/,從字符串開始向右查找;
反向則在右邊: / (?<!J)a /,從字符串向反方向(左)查找。

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    php微信公眾平臺(tái)開發(fā)類實(shí)例

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

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

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

最新評(píng)論

云安县| 微山县| 福泉市| 东港市| 甘德县| 五寨县| 宜昌市| 中卫市| 枞阳县| 镇远县| 嘉峪关市| 许昌市| 桃园市| 山西省| 民县| 三亚市| 盈江县| 手机| 清原| 红桥区| 翼城县| 迁安市| 和平区| 石河子市| 黑河市| 泊头市| 牟定县| 西宁市| 楚雄市| 蒙山县| 金湖县| 多伦县| 巴青县| 漳州市| 常熟市| 东乡族自治县| 绵阳市| 社旗县| 武川县| 金川县| 双辽市|