ホームページ  >  記事  >  バックエンド開発  >  PHP 正規表現戦闘: CSS スタイルのマッチング

PHP 正規表現戦闘: CSS スタイルのマッチング

王林
王林オリジナル
2023-06-22 18:31:40881ブラウズ

Web 開発では、HTML 要素のスタイルを便利に設定できる CSS スタイル シートは不可欠な部分です。ただし、大きな 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 配列の 2 番目の要素に一致結果を保存することを意味します。
  • 最後のセミコロン ";"は、スタイル ブロックの終わりにある閉じ中括弧「}」を無視するために使用されます。

ここでは、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 配列の最初と 2 番目の要素に格納されます。

上記の例を通じて、PHP 正規表現を使用して CSS スタイルと一致させる方法を学習しました。正規表現の作成方法、スタイル マッチングと属性抽出の実行方法の基本的なスキルは全員が習得したと思います。実際の開発では、さまざまなスタイル処理のニーズを満たすために、必要に応じてより複雑な照合および抽出操作を実行することもできます。


  1. }
  2. ;

以上がPHP 正規表現戦闘: CSS スタイルのマッチングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。