首頁  >  文章  >  後端開發  >  PHP正規表示式實戰:匹配CSS樣式

PHP正規表示式實戰:匹配CSS樣式

王林
王林原創
2023-06-22 18:31:40924瀏覽

在Web開發中,CSS樣式表是不可或缺的一部分,它可以方便地為HTML元素設定樣式。但是,有時候我們需要從大型的CSS檔案中提取出特定的樣式,這時就可以使用PHP的正規表示式功能來搭配。本篇文章介紹如何使用PHP正規表示式實戰來匹配CSS樣式。

我們先來看看CSS樣式的基本結構:

selector {
    property: value;
    property: value;
}

一個基本的CSS樣式由選擇器和一組屬性-值對組成。選擇器指定了要套用樣式的HTML元素,屬性-值對則是特定的樣式設定。在CSS中,屬性與值之間以冒號「:」分隔,每個屬性-值對之間以分號「;」分隔。

接下來,我們透過一個實例來說明如何使用PHP正規表示式來匹配CSS樣式。

假設我們有一個CSS檔案(style.css),其中包含如下樣式:

h1 {
    font-size: 24px;
    font-family: Arial, sans-serif;
    color: #333;
}

p {
    font-size: 16px;
    font-family: Helvetica, Arial, sans-serif;
    line-height: 1.4;
    color: #666;
}

.btn {
    display: inline-block;
    padding: 10px 20px;
    border: none;
    border-radius: 4px;
    font-size: 16px;
    font-weight: bold;
    text-transform: uppercase;
    background-color: #f00;
    color: #fff;
}

現在,我們需要從該檔案中提取出所有「.btn」類別的樣式。可以使用PHP的file_get_contents函數讀取整個檔案內容,然後使用preg_match_all函數進行比對。

// 读取样式文件内容
$css = file_get_contents('style.css');

// 匹配样式
$pattern = '/.btns*{([^}]+)}/';
preg_match_all($pattern, $css, $matches);

// 输出匹配结果
print_r($matches[0]);

上面的程式碼中,先使用file_get_contents函數讀取樣式檔案內容,並將內容儲存在變數$css中。然後,使用preg_match_all函數對樣式進行匹配,構造的正規表示式為“.btns*{(1 )}”:

  • “. btn」符合「.btn」類別的選擇器;
  • 「s*」符合0個或多個空白字元;
  • 「{(1 )}」符合大括號內的一組屬性-值對,其中「1 」表示符合除右大括號「}」以外的任意字符,加上括號「()」表示把符合結果存到$matches數組中。

最後,輸出匹配結果即可。

執行上面的程式碼,結果如下:

Array
(
    [0] => .btn {
    display: inline-block;
    padding: 10px 20px;
    border: none;
    border-radius: 4px;
    font-size: 16px;
    font-weight: bold;
    text-transform: uppercase;
    background-color: #f00;
    color: #fff;
}
)

從結果可以看出,正規表示式成功符合了「.btn」類別的樣式,並將整個樣式區塊傳回。

當然,我們也可以進一步提取出其中的屬性-值對。

// 读取样式文件内容
$css = file_get_contents('style.css');

// 匹配样式
$pattern = '/.btns*{([^}]+)}/';
preg_match_all($pattern, $css, $matches);

// 提取属性-值对
$pattern = '/([a-z-]+)s*:s*([^;]+);/';
foreach ($matches[1] as $block) {
    preg_match_all($pattern, $block, $props);
    print_r($props);
}

上面的程式碼中,我們使用另一個正規表示式「([a-z-] )s:s(2 ) ;”來匹配屬性-值對:

  • “([a-z-] )”匹配屬性名,其中“[a-z-] ”表示匹配小寫字母和橫線“-”組成的字符串,加上括號“()”表示把匹配結果保存在$props數組中的第一個元素中;
  • “s:s”匹配屬性名稱和屬性值之間的冒號“:”,中間可以包含0個或多個空白字元;
  • “(#2 )”符合屬性值,其中“2 」表示符合除分號「;」以外的任意字符,加上括號「()」表示把匹配結果保存在$props數組中的第二個元素中;
  • 最後一個分號「;」用來忽略樣式塊結尾的右大括號「}」。

這裡我們使用了foreach循環來遍歷所有樣式塊,對每個樣式塊的屬性-值對進行提取,並將結果輸出。

運行上面的程式碼,結果如下:

Array
(
    [0] => Array
        (
            [0] => display: inline-block;
            [1] => padding: 10px 20px;
            [2] => border: none;
            [3] => border-radius: 4px;
            [4] => font-size: 16px;
            [5] => font-weight: bold;
            [6] => text-transform: uppercase;
            [7] => background-color: #f00;
            [8] => color: #fff;
        )

    [1] => Array
        (
            [0] => display
            [1] => padding
            [2] => border
            [3] => border-radius
            [4] => font-size
            [5] => font-weight
            [6] => text-transform
            [7] => background-color
            [8] => color
        )

    [2] => Array
        (
            [0] => inline-block
            [1] => 10px 20px
            [2] => none
            [3] => 4px
            [4] => 16px
            [5] => bold
            [6] => uppercase
            [7] => #f00
            [8] => #fff
        )

)

從結果可以看出,我們成功提取出了「.btn」類別的樣式中的屬性-值對,並將結果按照屬性名稱和屬性值分別保存在$props數組的第一個和第二個元素中。

透過上面的實例,我們了解如何使用PHP正規表示式實現匹配CSS樣式,相信大家已經掌握瞭如何構造正規表示式,並進行樣式匹配和屬性提取的基本技巧。在實際開發中,我們還可以根據需要進行更複雜的匹配和提取操作,以滿足不同樣式處理的需求。


  1. }
  2. ;

以上是PHP正規表示式實戰:匹配CSS樣式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn