Regex pour les couleurs CSS hex

j'essaie d'écrire regex qui extrait toutes les couleurs hexadécimales du code CSS.

c'est Ce que j'ai maintenant:

Code:

$css = <<<CSS

/* Do not match me: #abcdefgh; I am longer than needed. */

.foo
{
    color: #cccaaa; background-color:#ababab;
}

#bar
{
    background-color:#123456
}
CSS;

preg_match_all('/#(?:[0-9a-fA-F]{6})/', $css, $matches);

Sortie:

Array
(
    [0] => Array
        (
            [0] => #abcdef
            [1] => #cccaaa
            [2] => #ababab
            [3] => #123456
        )

)

Je ne sais pas comment spécifier que seules ces couleurs sont assorties qui se termine par la ponctuation, l'espace ou newline.

27
demandé sur Hemaulo 2012-10-11 14:54:39

5 réponses

comme un code de couleur hexadécimal peut aussi comprendre 3 caractères, vous pouvez définir un groupe obligatoire et un groupe facultatif de lettres et de chiffres, de sorte que la notation longue et élaborée serait:

/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/

Ou si vous voulez une bonne et une version courte, vous pouvez dire que vous voulez 1 ou 2 groupes de 3 caractères alphanumériques, et qu'ils doivent être appariés cas insensiblement (