首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP PCRE 正則表達式實戰技巧:常用元字符、修飾符、回調替換與斷言應用

     編輯:PHP 相關知識

    PCRE 簡介

    PHP 提供兩套正則函數:preg_*(PCRE,Perl 兼容)與 ereg_*(POSIX)。POSIX 自 PHP 5.3 棄用,PHP 6 移除,本文專注 PCRE。

    模式以雙斜線包裹:/pattern/。

    核心元字符速查

    元字符說明示例
    \A字符串開頭
    \Z字符串結尾
    \b單詞邊界/\bis/ 匹配以 is 開頭
    \B非單詞邊界/\Bis/ 匹配 This 中的 is
    \d數字 [0-9]
    \D非數字 [^0-9]
    \w字母數字下劃線
    \W非 \w
    \s空白字符[\f\t\n\r]
    \S非空白

    模式修飾符

    • i:忽略大小寫
    • m:多行模式
    • s:單行模式(. 匹配換行)
    • x:忽略模式空白
    • U:非貪婪匹配(最近優先)
    • e:替換字符串作為代碼執行(慎用)

    示例:/apple/i 匹配 apple、Apple、APPLE。

    模式單元(捕獲組)與反向引用

    /^\d{2}([\/\-\s])\d{2}\1\d{4}$/
    // 匹配 12-31-2006、09/27/1996、86 01 4321
    // \1 引用第一個捕獲組的分隔符,保證前後一致

    非捕獲組 (?:...) 不佔用引用編號:

    /(?:a|b|c)(D|E|F)\1g/  // 匹配 aEEg,\1 引用第二組

    常用 PCRE 函數

    • preg_match() / preg_match_all()
    • preg_quote()
    • preg_split()
    • preg_grep()
    • preg_replace()

    實戰範例集錦

    1. 提取 form action 屬性

    preg_match_all('/\s+action=["\'](?!http:)(.*?)["\']\s*/s', $str, $match);

    2. 回調函數動態替換

    function callback_replace() {
        $url = 'https://esfang.house.sina.com.cn';
        $str = '...';
        $str = preg_replace('/(?<=\saction=["\'])(?!http:)(.*?)(?=["\']\s)/e', "search('$url', '$1')", $str);
        echo $str;
    }
    function search($url, $match) { return $url . '/' . $match; }

    3. 斷言匹配無屬性 HTML 標籤內容

    preg_match_all('/(?<=<(\w{1})>).*(?=<\/\1>)/', $str, $match);

    4. 重寫 HTML 中的相對鏈接

    $form_html = preg_replace('/(?<=\s(action|src|href)=["\'])(?!http:|javascript)(.*?)(?=["\']\s)/e', "add_url('$url', '$1')", $form_html);

    效能提醒

    正則功能強大但編寫調試耗時,簡單字符串切割(explode、strpos)往往效率更高、可讀性更好。根據任務複雜度選擇工具。

    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved