php –正則表達式

在線正則檢測工具連接

正則表達式語法參考

.                       除換行符之外的全部字符
    \.                      轉義字符(另有\*, \(, \\, 等等.)
    ^                       字符串開頭
    $                       字符串結尾
    \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

<?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\n";
print_r(preg_filter($pattern, $replace, $subject));

echo "preg_replace returns\n";
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\n";
$text.= "Last christmas was 12/24/2001\n";
// 回調函數
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
相關文章
相關標籤/搜索