PHP進階(一)

一、數(shù)組

  • 1、數(shù)組的聲明:$arr = array();
  • 2物独、數(shù)組的初始化:
    PHP有兩種數(shù)組:索引數(shù)組、關聯(lián)數(shù)組氯葬。
  • 索引數(shù)組:索引數(shù)組是指數(shù)組的鍵是整數(shù)的數(shù)組挡篓,并且鍵的整數(shù)順序是從0開始,依次類推帚称。
    索引數(shù)組賦值:
    1官研、用數(shù)組變量的名字后面跟一個中括號的方式賦值,當然闯睹,索引數(shù)組中阀参,中括號內的鍵一定是整數(shù)。比如瞻坝,$arr[0]='蘋果';
    2蛛壳、用array()創(chuàng)建一個空數(shù)組,使用=>符號來分隔鍵和值所刀,左側表示鍵衙荐,右側表示值。當然浮创,索引數(shù)組中忧吟,鍵一定是整數(shù)。比如斩披,array('0'=>'蘋果');
    3溜族、用array()創(chuàng)建一個空數(shù)組讹俊,直接在數(shù)組里用英文的單引號'或者英文的雙引號"賦值,數(shù)組會默認建立從0開始的整數(shù)的鍵煌抒。比如array('蘋果');這個數(shù)組相當于array('0'=>'蘋果');
    獲取數(shù)組中的值:
<?php
//從數(shù)組變量$arr中仍劈,讀取鍵為0的值
$arr = array('蘋果','香蕉');
$arr0=$arr['0'];
if( isset($arr0) ) {print_r($arr0);}
?>
//通過for循環(huán)
<?php
$fruit=array('蘋果','香蕉','菠蘿');
for($index=0; $index<3; $index++){
    echo '<br>數(shù)組第'.$index.'值是:'.$fruit[$index];
}
?>
//通過froeach循環(huán)
<?php
$fruit=array('蘋果','香蕉','菠蘿');
foreach($fruit as $key=>$value){
    echo '<br>第'.$key.'值是:'.$fruit[$key];
}
?>
  • 關聯(lián)數(shù)組:關聯(lián)數(shù)組是指數(shù)組的鍵是字符串的數(shù)組。
    初始化:
$fruit = array(
    'apple'=>"蘋果",
    'banana'=>"香蕉",
    'pineapple'=>"菠蘿"
);
<?php
//創(chuàng)建一個關聯(lián)數(shù)組寡壮,關聯(lián)數(shù)組的鍵“orange”贩疙,值是“橘子”
$fruit=array('orange'=>"橘子");
print_r($fruit['orange']);
?>

賦值:
第一種:用數(shù)組變量的名字后面跟一個中括號的方式賦值,當然况既,關聯(lián)數(shù)組中这溅,中括號內的鍵一定是字符串。比如棒仍,$arr['apple']='蘋果';
第二種:用array()創(chuàng)建一個空數(shù)組悲靴,使用=>符號來分隔鍵和值,左側表示鍵莫其,右側表示值对竣。當然,關聯(lián)數(shù)組中榜配,鍵一定是字符串否纬。比如,array('apple'=>'蘋果');
訪問數(shù)組:

<?php
//從數(shù)組變量$arr中蛋褥,讀取鍵為apple的值
$arr = array('apple'=>"蘋果",'banana'=>"香蕉",'pineapple'=>"菠蘿");
$arr0=$arr['apple'];
if( isset($arr0) ) {print_r($arr0);}
?>
//通過foreach訪問
<?php
$fruit=array('apple'=>"蘋果",'banana'=>"香蕉",'pineapple'=>"菠蘿");
foreach($fruit as $key=>$value){
    echo '<br>鍵是:'.$key.'临燃,對應的值是:'.$value;
}
?>

二、函數(shù)

  • 1烙心、定義方式:
  • 1.使用關鍵字“function”開始
  • 2.函數(shù)名可以是字母或下劃線開頭:function name()
  • 3.在大括號中編寫函數(shù)體:
function name() {
    echo 'Eric';
}
//在這里調用函數(shù)
name();
  • 2膜廊、返回值
    使用return關鍵字可以使函數(shù)返回值,可以返回包括數(shù)組和對象的任意類型淫茵,如果省略了 return爪瓜,則默認返回值為 NULL。
function add($a) {
    return $a+1;
}
$b = add(1);

返回語句會立即中止函數(shù)的運行匙瘪,并且將控制權交回調用該函數(shù)的代碼行铆铆。返回結果同上。

function add($a) {
    return $a+1;
    $a = 10;
    return $a+20;
}
$b = add(1);

函數(shù)不能返回多個值丹喻,但可以通過返回一個數(shù)組來得到類似的效果薄货。

function numbers() {
    return array(1, 2, 3);
}
list ($one, $two, $three) = numbers();
  • 3、可變函數(shù)
    通過變量的值來調用函數(shù)碍论,因為變量的值是可變的谅猾,所以可以通過改變一個變量的值來實現(xiàn)調用不同的函數(shù)。經(jīng)常會用在回調函數(shù)、函數(shù)列表税娜,或者根據(jù)動態(tài)參數(shù)來調用不同的函數(shù)坐搔。可變函數(shù)的調用方法為變量名加括號敬矩。
<?php
function func() {
    echo 'my function called.';
}
$name = 'func';
//調用可變函數(shù)
$name();
//my function called.

可變函數(shù)也可以用在對象的方法調用上概行。

class book {
    function getName() {
        return 'bookname';
    }
}
$func = 'getName';
$book = new book();
$book->$func();
  • 4、內置函數(shù)
    內置函數(shù)指的是PHP默認支持的函數(shù)谤绳,PHP內置了很多標準的常用的處理函數(shù),包括字符串處理袒哥、數(shù)組函數(shù)缩筛、文件處理、session與cookie處理等堡称。
    字符串替換:
<?php
$str = '蘋果很好吃瞎抛。';
//請將變量$str中的蘋果替換成香蕉
$str = str_replace('蘋果', '香蕉', $str);
echo $str;
  • 5、判斷函數(shù)是否存在
    使用function_exists判斷一下函數(shù)是否存在却紧。同樣的method_exists可以用來檢測類的方法是否存在桐臊。
<?php
function func() {
    echo 'exists';
}
$name = 'func';
if (function_exisits('func')) { //判斷函數(shù)是否存在
    $name();
}
//類是否定義可以使用class_exists
class MyClass{
}
// 使用前檢查類是否存在
if (class_exists('MyClass')) {
    $myclass = new MyClass();
}
//文件是否存在file_exists
$filename = 'test.txt';
if (!file_exists($filename)) {
    echo $filename . ' not exists.';
}

三、類和對象

<?php
//定義一個類
class Car {
    var $name = '汽車';
    function getName() {
        return $this->name;
    }
}

//實例化一個car對象
$car = new Car();
$car->name = '奧迪A6'; //設置對象的屬性值
echo $car->getName();  //調用對象的方法 輸出對象的名字
  • 1晓殊、對象的創(chuàng)建
    受保護的屬性與私有屬性不允許外部調用断凶,在類的成員方法內部是可以調用的。默認都為public巫俺,外部可以訪問认烁。一般通過->對象操作符來訪問對象的屬性或者方法,對于靜態(tài)屬性則使用::雙冒號進行訪問介汹。當在類成員方法內部調用的時候却嗡,可以使用$this偽變量調用當前對象的屬性。
$car = new Car();
//也可以采用變量來創(chuàng)建
$className = 'Car';
$car = new $className();
  • 2嘹承、類的方法
    使用關鍵字static修飾的窗价,稱之為靜態(tài)方法,靜態(tài)方法不需要實例化對象叹卷,可以通過類名直接調用撼港,操作符為雙冒號::。
class Car {
    public static function getName() {
        return '汽車';
    }
?}
echo Car::getName(); //結果為“汽車”
  • 3骤竹、構造函數(shù)和析構函數(shù)
    使用__construct()定義一個構造函數(shù)餐胀,具有構造函數(shù)的類,會在每次對象創(chuàng)建的時候調用該函數(shù)瘤载,因此常用來在對象創(chuàng)建的時候進行一些初始化工作否灾。在子類中如果定義了__construct則不會調用父類的__construct,如果需要同時調用父類的構造函數(shù)鸣奔,需要使用parent::__construct()顯式的調用墨技。
    使用__destruct()進行定義惩阶,析構函數(shù)指的是當某個對象的所有引用被刪除,或者對象被顯式的銷毀時會執(zhí)行的函數(shù)扣汪。
<?php
class Car {
    //增加構造函數(shù)與析構函數(shù)
    function _construct(){
        echo "構造函數(shù)執(zhí)行";
    }
    function _destruct(){
        echo "析構函數(shù)執(zhí)行";
    }
}
class Truck extends Car{
    function __construct(){
        print "子類構造函數(shù)被調用 \n";
        parent::__construct();
    }
    function __destruct(){
        print "子類析構函數(shù)被調用 \n";
        parent::__destruct();
    }  
}
$car = new Car();
unset($car);
$truck = new Truck();
unset($truck);
?>
  • 4断楷、靜態(tài)Static
    靜態(tài)屬性與方法可以在不實例化類的情況下調用,直接使用類名::方法名的方式進行調用崭别。靜態(tài)屬性不允許對象使用->操作符調用冬筒。靜態(tài)方法中,$this偽變量不允許使用茅主∥杼担可以使用self,parent诀姚,static在內部調用靜態(tài)方法與屬性响牛。
class Car {
    private static $speed = 10;
    public static function getSpeed() {
        return self::$speed;
    }
}
echo Car::getSpeed();  //調用靜態(tài)方法
 //動態(tài)調用靜態(tài)方法
$func = 'getSpeed';
$className = 'Car';
echo $className::$func(); 
  • 5、訪問控制
    如果構造函數(shù)定義成了私有方法赫段,則不允許直接實例化對象了呀打,這時候一般通過靜態(tài)方法進行實例化,在設計模式中會經(jīng)常使用這樣的方法來控制對象的創(chuàng)建糯笙,比如單例模式只允許有一個全局唯一的對象贬丛。
class Car {
    private function __construct() {
        echo 'object create';
    }

    private static $_object = null;
    public static function getInstance() {
        if (empty(self::$_object)) {
            self::$_object = new Car(); //內部方法可以調用私有方法,因此這里可以創(chuàng)建對象
        }
        return self::$_object;
    }
}
//$car = new Car(); //這里不允許直接實例化對象
$car = Car::getInstance(); //通過靜態(tài)方法來獲得一個實例
<?php
class Car {
    public $speed = 0; //汽車的起始速度是0
    
    public function speedUp() {
        $this->speed += 10;
        return $this->speed;
    }
}
//定義繼承于Car的Truck類
class Truck extends Car{
    public function speedUp(){
        $this->speed=parent::speedUp()+50;
    }
}
$car = new Truck();
$car->speedUp();
echo $car->speed;
  • 6给涕、重載
    PHP中的重載指的是動態(tài)的創(chuàng)建屬性與方法瘫寝,是通過魔術方法來實現(xiàn)的。屬性的重載通過__set稠炬,__get焕阿,__isset,__unset來分別實現(xiàn)對不存在屬性的賦值首启、讀取暮屡、判斷屬性是否設置、銷毀屬性毅桃。
    屬性重載:
class Car {
    private $ary = array();
    
    public function __set($key, $val) {
        $this->ary[$key] = $val;
    }
    
    public function __get($key) {
        if (isset($this->ary[$key])) {
            return $this->ary[$key];
        }
        return null;
    }
    
    public function __isset($key) {
        if (isset($this->ary[$key])) {
            return true;
        }
        return false;
    }
    
    public function __unset($key) {
        unset($this->ary[$key]);
    }
}
$car = new Car();
$car->name = '汽車';  //name屬性動態(tài)創(chuàng)建并賦值
echo $car->name;

方法重載:

<?php
class Car {
    public $speed = 10;

    //在這里使用重載實現(xiàn)speedDown方法
    public function _call($name,$args){
        if($name=='speedDown'){
            $this->speed-=10;
        }
    }
}
$car = new Car();
$car->speedDown(); //調用不存在的speedDown方法
echo $car->speed;
  • 7褒纲、高級特性
    對象比較:當同一個類的兩個實例的所有屬性都相等時,可以使用比較運算符==進行判斷钥飞,當需要判斷兩個變量是否為同一個對象的引用時莺掠,可以使用全等運算符===進行判斷。
class Car {
}
$a = new Car();
$b = new Car();
if ($a == $b) echo '==';   //true
if ($a === $b) echo '==='; //false

對象復制:在一些特殊情況下读宙,可以通過關鍵字clone來復制一個對象彻秆,這時__clone方法會被調用,通過這個魔術方法來設置屬性的值。

class Car {
    public $name = 'car';
    
    public function __clone() {
        $obj = new Car();
        $obj->name = $this->name;
    }
}
$a = new Car();
$a->name = 'new car';
$b = clone $a;
var_dump($b);

對象序列化:可以通過serialize方法將對象序列化為字符串唇兑,用于存儲或者傳遞數(shù)據(jù)酒朵,然后在需要的時候通過unserialize將字符串反序列化成對象進行使用。

class Car {
    public $name = 'car';
}
$a = new Car();
$str = serialize($a); //對象序列化成字符串
echo $str.'<br>';
$b = unserialize($str); //反序列化為對象
var_dump($b);

四扎附、字符串

  • 1蔫耽、單引號和雙引號的區(qū)別
    PHP允許我們在雙引號串中直接包含字符串變量。
    而單引號串中的內容總被認為是普通字符留夜。
$str='hello';
echo "str is $str"; //運行結果: str is hello
echo 'str is $str'; //運行結果: str is $str
  • 2匙铡、去除字符串首尾的空格
    PHP中有三個函數(shù)可以去掉字符串的空格
    trim去除一個字符串兩端空格。
    rtrim是去除一個字符串右部空格碍粥,其中的r是right的縮寫鳖眼。
    ltrim是去除一個字符串左部空格,其中的l是left的縮寫即纲。
<?php
$str="      左側空格要去掉";
echo ltrim($str);
?>
  • 3具帮、獲取字符串的長度
    直接獲取字符串的長度函數(shù)就是strlen()博肋。strlen函數(shù)對于計算英文字符是非常的擅長低斋,但是如果有中文漢字,可以使用mb_strlen()函數(shù)獲取字符串中中文長度匪凡。
$str = 'hello';
$len = strlen($str);
echo $len;//輸出結果是5
$str = "我愛你";
echo mb_strlen($str,"UTF8");//結果:3膊畴,此處的UTF8表示中文編碼是UTF8格式,中文一般采用UTF8編碼
  • 4病游、字符串的截取
  • 1唇跨、英文字符串的截取函數(shù)substr()
$str='i love you';
//截取love這幾個字母
echo substr($str, 2, 4);//為什么開始位置是2呢,因為substr函數(shù)計算字符串位置是從0開始的衬衬,也就是0的位置是i,1的位置是空格买猖,l的位置是2。從位置2開始取4個字符滋尉,就是love玉控。
  • 2、中文字符串的截取函數(shù)mb_substr()
$str='我愛你狮惜,中國';
//截取中國兩個字
echo mb_substr($str, 4, 2, 'utf8');//為什么開始位置是4呢高诺,和上一個例子一樣,因為mb_substr函數(shù)計算漢字位置是從0開始的碾篡,也就是0的位置是我,1的位置是愛虱而,4的位置是中。從位置4開始取2個漢字开泽,就是中國牡拇。中文編碼一般是utf8格式
  • 5、查找字符串
    用PHP的查找字符串函數(shù)strpos();
<?php
//查找字符串
$str = 'What is your name?';
echo strpos($str,'name');
?>
//13:表示在第13個位置出現(xiàn)
  • 6、替換字符串
    用PHP的替換函數(shù)str_replace()
    函數(shù)說明:str_replace(要查找的字符串, 要替換的字符串, 被搜索的字符串, 替換進行計數(shù)[可選])
$str = 'I want to learn js';
$replace = str_replace('js', 'php', $str);
echo $replace;//結果顯示I want to learn php
  • 7诅迷、格式化字符串
    用PHP的格式化字符串函數(shù)sprintf()
    函數(shù)說明:sprintf(格式, 要轉化的字符串)
$str = '99.9';
$result = sprintf('%01.2f', $str);
echo $result;//結果顯示99.90

1佩番、這個 % 符號是開始的意思,寫在最前面表示指定格式開始了罢杉。 也就是 "起始字符", 直到出現(xiàn) "轉換字符" 為止趟畏,就算格式終止。
2滩租、跟在 % 符號后面的是 0赋秀, 是 "填空字元" ,表示如果位置空著就用0來填滿律想。
3猎莲、在 0 后面的是1,這個 1 是規(guī)定整個所有的字符串占位要有1位以上(小數(shù)點也算一個占位)技即。如果把 1 改成 6著洼,則 $result的值將為 099.90,因為,在小數(shù)點后面必須是兩位而叼,99.90一共5個占位身笤,現(xiàn)在需要6個占位,所以用0來填滿葵陵。
4液荸、在 %01 后面的 .2 (點2) 就很好理解了叫编,它的意思是滚躯,小數(shù)點后的數(shù)字必須占2位。 如果這時候并扇,$str 的值為9.234,則 $result的值將為9.23.為什么4 不見了呢绊困? 因為在小數(shù)點后面文搂,按照上面的規(guī)定,必須且僅能占2位秤朗。 可是 $str 的值中煤蹭,小數(shù)點后面占了3位,所以川梅,尾數(shù)4被去掉了疯兼,只剩下 23。
5贫途、最后吧彪,以 f "轉換字符" 結尾。

  • 8丢早、字符串的合并與分割
  • 1姨裸、php字符串合并函數(shù)implode()
    函數(shù)說明:implode(分隔符[可選], 數(shù)組)
    返回值:把數(shù)組元素組合為一個字符串
$arr = array('Hello', 'World!');
$result = implode('', $arr);
print_r($result);//結果顯示Hello World!
  • 2秧倾、php字符串分隔函數(shù)explode()
    函數(shù)說明:explode(分隔符[可選], 字符串)
    返回值:函數(shù)返回由字符串組成的數(shù)組
$str = 'apple,banana';
$result = explode(',', $str);
print_r($result);//結果顯示array('apple','banana')
  • 9、字符串的轉義
    php字符串轉義函數(shù)addslashes()
    函數(shù)說明:用于對特殊字符加上轉義字符傀缩,返回一個字符串
    返回值:一個經(jīng)過轉義后的字符串
<?php
//字符串轉義
$str = "what's this?";
echo addslashes($str);
?>
//what\'s this?

五那先、表達式

  • 1、正則表達式
    對字符串進行操作的一種邏輯公式赡艰,就是用一些特定的字符組合成一個規(guī)則字符串售淡,稱之為正則匹配模式。PHP中使用PCRE庫函數(shù)進行正則匹配慷垮,比如下例中的preg_match用于執(zhí)行一個正則匹配揖闸,常用來判斷一類字符模式是否存在。
<?php
//請修改變量p的正則表達式料身,使他能夠匹配蘋果
$p = '/蘋果/';
$str = "我喜歡吃蘋果";
if (preg_match($p, $str)) {
    echo '匹配成功';
}

PCRE庫函數(shù)中汤纸,正則匹配模式使用分隔符與元字符組成,分隔符可以是非數(shù)字芹血、非反斜線贮泞、非空格的任意字符。經(jīng)常使用的分隔符是正斜線(/)幔烛、hash符號(#) 以及取反符號(~)啃擦。

/foo bar/
#^[^0-9]$#
~php~

如果模式中包含分隔符,則分隔符需要使用反斜杠(\)進行轉義说贝。

/http:\/\//

如果模式中包含較多的分割字符议惰,建議更換其他的字符作為分隔符慎颗,也可以采用preg_quote進行轉義乡恕。

$p = 'http://';
$p = '/'.preg_quote($p, '/').'/';
echo $p;

分隔符后面可以使用模式修飾符,模式修飾符包括:i, m, s, x等俯萎,例如使用i修飾符可以忽略大小寫匹配

$str = "Http://www.imooc.com/";
if (preg_match('/http/i', $str)) {
    echo '匹配成功';
}
  • 2傲宜、元字符與轉義
    正則表達式中具有特殊含義的字符稱之為元字符,常用的元字符有:

\ 一般用于轉義字符
^ 斷言目標的開始位置(或在多行模式下是行首)
$ 斷言目標的結束位置(或在多行模式下是行尾)
. 匹配除換行符外的任何字符(默認)
[ 開始字符類定義
] 結束字符類定義
| 開始一個可選分支
( 子組的開始標記
) 子組的結束標記
? 作為量詞夫啊,表示 0 次或 1 次匹配函卒。位于量詞后面用于改變量詞的貪婪特性。 (查閱量詞)
* 量詞撇眯,0 次或多次匹配
+ 量詞报嵌,1 次或多次匹配
{n} 重復n次
{n,} 重復n次或更多次
{n,m} 重復n到m次
{ 自定義量詞開始標記
} 自定義量詞結束標記
\w 匹配字母或數(shù)字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數(shù)字
\b 匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
\W 匹配任意不是字母,數(shù)字熊榛,下劃線锚国,漢字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數(shù)字的字符
\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字符

//下面的\s匹配任意的空白符,包括空格玄坦,制表符血筑,換行符绘沉。[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符豺总。
$p = '/^我[^\s]+(蘋果|香蕉)$/';
$str = "我喜歡吃蘋果";
if (preg_match($p, $str)) {
    echo '匹配成功';
}

元字符具有兩種使用場景车伞,一種是可以在任何地方都能使用,另一種是只能在方括號內使用喻喳,在方括號內使用的有:
\ 轉義字符
^ 僅在作為第一個字符(方括號內)時另玖,表明字符類取反
- 標記字符范圍
其中^在反括號外面,表示斷言目標的開始位置表伦,但在方括號內部則代表字符類取反日矫,方括號內的減號-可以標記字符范圍,例如0-9表示0到9之間的所有數(shù)字绑榴。

//下面的\w匹配字母或數(shù)字或下劃線哪轿。
$p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/';
$str = "我的郵箱是Spark.eric@imooc.com";
preg_match($p, $str, $match);
echo $match[0];
<?php
//請修改變量p的正則表達式,使他能夠匹配str中的電話
 $p =  '/\d{3}-\d{8}/';
$str = "我的電話是010-12345678";
preg_match($p, $str, $match);
echo $match[0];
//先執(zhí)行3次數(shù)字匹配翔怎,在匹配-窃诉,在匹配8次數(shù)字

舉例:
\ba\w*\b
匹配以字母a開頭的單詞——先是某個單詞開始處(\b),然后是字母a,然后是任意數(shù)量的字母或數(shù)字(\w)赤套,最后是單詞結束處(\b)飘痛。
\d+匹配1個或更多連續(xù)的數(shù)字。這里的+是和
類似的元字符容握,不同的是*匹配重復任意次(可能是0次)宣脉,而+則匹配重復1次或更多次。
\b\w{6}\b
匹配剛好6個字符的單詞剔氏。
元字符(和數(shù)字6在同一個鍵位上的符號)和$都匹配一個位置塑猖,這和\b有點類似。匹配你要用來查找的字符串的開頭谈跛,$匹配結尾羊苟。這兩個代碼在驗證輸入的內容時非常有用,比如一個網(wǎng)站如果要求你填寫的QQ號必須為5位到12位數(shù)字時感憾,可以使用:
^\d{5,12}$
這里的{5,12}和前面介紹過的{2}是類似的蜡励,只不過{2}匹配只能不多不少重復2次,{5,12}則是重復的次數(shù)不能少于5次阻桅,不能多于12次凉倚,否則都不匹配。
因為使用了^和$嫂沉,所以輸入的整個字符串都要用來和\d{5,12}來匹配稽寒,也就是說整個輸入必須是5到12個數(shù)字,因此如果輸入的QQ號能匹配這個正則表達式的話输瓜,那就符合要求了瓦胎。
\(?0\d{2}[) -]?\d{8}
這個表達式可以匹配幾種格式的電話號碼芬萍,像(010)88886666,或022-22334455搔啊,或02912345678等柬祠。我們對它進行一些分析吧:首先是一個轉義字符(,它能出現(xiàn)0次或1次(?),然后是一個0,后面跟著2個數(shù)字(\d{2})负芋,然后是)或-或空格中的一個漫蛔,它出現(xiàn)1次或不出現(xiàn)(?),最后是8個數(shù)字(\d{8})旧蛾。

  • 3莽龟、貪婪模式與懶惰模式
    正則表達式中每個元字符匹配一個字符,當使用+之后將會變的貪婪锨天,它將匹配盡可能多的字符毯盈,但使用問號?字符時,它將盡可能少的匹配字符病袄,既是懶惰模式搂赋。
    貪婪模式:在可匹配與可不匹配的時候,優(yōu)先匹配
//下面的\d表示匹配數(shù)字
$p = '/\d+\-\d+/';
$str = "我的電話是010-12345678";
preg_match($p, $str, $match);
echo $match[0]; //結果為:010-12345678

懶惰模式:在可匹配與可不匹配的時候益缠,優(yōu)先不匹配

$p = '/\d?\-\d?/';
$str = "我的電話是010-12345678";
preg_match($p, $str, $match);
echo $match[0];  //結果為:0-1
  • 4脑奠、查找匹配
  • 1、匹配一次結果:preg_match
  • 2幅慌、匹配多個結果:preg_match_all可以循環(huán)獲取一個列表的匹配結果數(shù)組宋欺。
$p = "|<[^>]+>(.*?)</[^>]+>|i";
$str = "<b>example: </b><div align=left>this is a test</div>";
preg_match_all($p, $str, $matches);
print_r($matches);
  • 5、搜索和替換
$string = 'April 15, 2014';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '$3, ${1} $2';
echo preg_replace($pattern, $replacement, $string); //結果為:2014, April 15
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末胰伍,一起剝皮案震驚了整個濱河市齿诞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喇辽,老刑警劉巖掌挚,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雨席,死亡現(xiàn)場離奇詭異菩咨,居然都是意外死亡,警方通過查閱死者的電腦和手機陡厘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門抽米,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糙置,你說我怎么就攤上這事云茸。” “怎么了谤饭?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵标捺,是天一觀的道長懊纳。 經(jīng)常有香客問我,道長亡容,這世上最難降的妖魔是什么嗤疯? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮闺兢,結果婚禮上茂缚,老公的妹妹穿的比我還像新娘。我一直安慰自己屋谭,他們只是感情好脚囊,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著桐磁,像睡著了一般悔耘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上我擂,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天淮逊,我揣著相機與錄音,去河邊找鬼扶踊。 笑死泄鹏,一個胖子當著我的面吹牛,可吹牛的內容都是我干的秧耗。 我是一名探鬼主播备籽,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼分井!你這毒婦竟也來了车猬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤尺锚,失蹤者是張志新(化名)和其女友劉穎珠闰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘫辩,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡伏嗜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了伐厌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片承绸。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挣轨,靈堂內的尸體忽然破棺而出军熏,到底是詐尸還是另有隱情,我是刑警寧澤卷扮,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布荡澎,位于F島的核電站均践,受9級特大地震影響,放射性物質發(fā)生泄漏摩幔。R本人自食惡果不足惜浊猾,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望热鞍。 院中可真熱鬧葫慎,春花似錦、人聲如沸薇宠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澄港。三九已至椒涯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間回梧,已是汗流浹背废岂。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留狱意,地道東北人湖苞。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像详囤,于是被迫代替她去往敵國和親财骨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容

  • 一藏姐、數(shù)組 1隆箩、數(shù)組定義 數(shù)組就是一個鍵值對組成的語言結構,鍵類似于酒店的房間號羔杨,值類似于酒店房間里存儲的東西捌臊。 $...
    空谷悠閱讀 804評論 4 11
  • 常用函數(shù) var_dump() 函數(shù)返回數(shù)組的數(shù)據(jù)類型和值 unset() 釋放 bool define(stri...
    Scallions_閱讀 635評論 1 2
  • 一、php可以做什么 php是一種可以在服務器端運行的編程語言兜材,可以運行在Web服務器端理澎。 php是一門后臺編程語...
    空谷悠閱讀 3,086評論 4 97
  • 一、字符串操作 PHP開發(fā)中护姆,我們遇到最多的可能就是字符串矾端。 一個字符串 通過下面的3種方法來定義: 1、單引號 ...
    空谷悠閱讀 742評論 1 6
  • 發(fā)的晚了卵皂。最近心情不太好。
    vvan_s閱讀 754評論 0 50