php –正規表示式

makalong發表於2019-02-16

線上正則檢測工具連結

正規表示式語法參考

    .                       除換行符以外的所有字元
    .                      轉義字元(另有*, (, \, 等等.)
    ^                       字串開頭
    $                       字串結尾
    d,w,s                一個數字, 字元 [A-Za-z0-9_], 空格.
    D,W,S                一個非數字, 非字元 [A-Za-z0-9_], 非空格.
    [abc]                   a,b或c中的一個.
    [a-z]                   a到z中的一個字母.
    [^abc]                  除a,b或c的一個字元.
    aa|bb                   aa或者bb.
    ?                       0次或1次匹配.
    *                       任意次數匹配.
    +                       一次或一次以上匹配.
    {n}                     n次精確匹配.
    {n,}                    n次或n次以上匹配.
    {m,n}                   最少m次,最多n次匹配.
    ??,*?,+?,{n}?, etc.     同上,但儘可能少次數的匹配.
    (expr)                  捕獲 expr 子模式,以 1使用它, 等等.
    (?:expr)                忽略捕獲的子模式.
    (?=expr)                正向預查模式 expr.
    (?!expr)                負向預查模式 expr.

php正則函式介紹與區別

preg_match & preg_match_all

//執行一個正規表示式的匹配
preg_match(string $pattern , string $subject[,array $matches])
//執行一個全域性正規表示式匹配
preg_match_all(string $pattern , string $subject[,array $matches])

preg_match() 返回 $pattern的匹配次數0或1次,因為匹配到第一個後就會停止搜尋,而 preg_match_all() 將會一直搜尋 $subject 到結尾

<?php
    $pattern=`/[0-9]/`;
    $object=`werdf43ofd9as2noi4`;
    $m1=$m2=array();
    preg_match($pattern,$object,$m1);
    preg_match_all($pattern,$object,$m2);
    var_dump($m1);
    var_dump($m2);
//結果:
Array
(
    [0] => 4
)
Array
(
    [0] => Array
        (
            [0] => 4
            [1] => 3
            [2] => 9
            [3] => 2
            [4] => 4
        )
)

preg_fiflter & preg_replace

//只返回經過正則匹配的結果
preg_fiflter(mixed $pattern , mixed $replacement , mixed $subject)
//放回所有結果
preg_replace(mixed $pattern , mixed $replacement , mixed $subject)
$subject = array(`1`, `a`, `2`, `b`, `3`, `A`, `B`, `4`);
$pattern = array(`/d/`, `/[a-z]/`, `/[1a]/`);
$replace = array(`A:$0`, `B:$0`, `C:$0`);

echo "preg_filter returns
";
print_r(preg_filter($pattern, $replace, $subject));

echo "preg_replace returns
";
print_r(preg_replace($pattern, $replace, $subject));
//結果:
    preg_filter returns
    Array
    (
        [0] => A:C:1
        [1] => B:C:a
        [2] => A:2
        [3] => B:b
        [4] => A:3
        [7] => A:4
    )
    preg_replace returns
    Array
    (
        [0] => A:C:1
        [1] => B:C:a
        [2] => A:2
        [3] => B:b
        [4] => A:3
        [5] => A
        [6] => B
        [7] => A:4
    )

其他正則函式介紹

  • preg_quote(string $pattern) — 轉義正規表示式字元,有時候匹配字元中包含正規表示式語法,需要進行轉義才能進行匹配
    正規表示式特殊字元有: . + * ? [ ^ ] $ ( ) { } = ! < > | : –

  • preg_split(string $pattern , string $subject) — 通過一個正規表示式分隔字串,類似於explode函式

  • preg_grep — 返回匹配模式的陣列條目

$array = array("23.32","22","12.009","23.43.43");
         print_r(preg_grep("/^(d+)?.d+$/",$array));
    //結果:
    Array
    (
        [0] => 23.32
        [2] => 12.009
    )
  • preg_replace_callback — 執行一個正規表示式搜尋並且使用一個回撥進行替換

<?php
// 將文字中的年份增加一年.
$text = "April fools day is 04/01/2002
";
$text.= "Last christmas was 12/24/2001
";
// 回撥函式
function next_year($matches)
{
  // 通常: $matches[0]是完成的匹配
  // $matches[1]是第一個捕獲子組的匹配
  // 以此類推
  return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
            "|(d{2}/d{2}/)(d{4})|",
            "next_year",
            $text);

?>
//結果
April fools day is 04/01/2003
Last christmas was 12/24/2002

相關文章