2010-11-02 5 views
4

J'essaie de ramasser regex en utilisant nettuts. Cependant, je n'ai toujours pas été très loin et quelque chose a besoin de réparation aujourd'hui.PHP - Aide à l'écriture regex?

J'ai besoin d'une regex qui fait ce qui suit. Je vais ensuite l'utiliser pour forcer les utilisateurs à avoir une certaine couleur sur leurs éléments HTML.

Quelqu'un pourrait-il convertir la variable $ regex en regex?

+1

* (lié) * [Meilleures méthodes pour analyser HTML] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) - sauf si vous voulez vraiment dire * {absolument quoi que ce soit} * – Gordon

+0

{absolument rien} quelle serait cette valeur, vraiment? HTML? CSS? –

Répondre

2

Si vous voulez "absolument rien" alors ... n'ajoutez rien d'autre! Vous pouvez utiliser quantificator et des cours pour le reste:

$regex = '/color: #[a-fA-F0-9]{6};/' 

[a-fA-F0-9] correspond à tout caractère entre-f (minuscule), A-F (majuscule) et un chiffre. {6} signifie qu'il doit avoir exactement 6 caractères.
N'oubliez pas qu'avec l'extension PCRE de PHP, vous avez besoin de délimiteurs (/) dans ce cas).

+0

Légèrement plus court: '/ color: # [a-f0-9] {6}/i' – nickf

+0

nickf> alors que cela est vrai, l'auteur n'a pas mentionné quoi que ce soit à propos de la capture de COLOR ou de telles choses. Mais maintenant, il peut choisir la solution qu'il veut: -p –

+0

L'utilisation d'un seul espace blanc (littéral) rend l'erreur sujette lorsqu'il y a zéro, ou plus d'un espace. Il vaut mieux faire '\ s *' ou '\ s +', ou même '[] *' ou '[] +' quand seulement les espaces sont autorisés et qu'il n'y a pas de saut de ligne. –

3

Vous êtes assez proche.

/color:\s*\#[A-Fa-f0-9]{6};/ 
+0

Pas nécessaire d'échapper à '#' si vous ne l'utilisez pas comme délimiteur, car il correspond à 0 à beaucoup d'espaces et est donc plus flexible;) – BoltClock

+0

La seule différence entre le mien et @ Vincent's ci-dessus est que je permets de 0 ou plusieurs espaces entre la couleur: et le #. Cela peut ou peut ne pas être ce que vous voulez :) – Cfreak

2
/color: ?#([0-9a-f]{3}){1,2};/i 

Caractéristiques:

  • des espaces facultatifs entre color: et la valeur
  • #rgb et #rrggbb correspondant

De plus, vous pouvez ajouter une partie [^-] pour pas pour correspondre à background-color: #...: /[^-]color: ?#([0-9a-f]{3}){1,2};/i. En outre, vous pouvez utiliser un negative lookbehind si vous le souhaitez: (?<!-).

+0

+1 pour correspondre à la fois les codes hexadécimaux de 3 et 6 caractères ... – ircmaxell

+0

Corrigez-moi s'il vous plaît si je me trompe (ce qui est une possibilité distincte ici), mais je ne * pense pas * PHP supporte le look négatif derrière – nickf

+1

@nickf: Oui c'est le http://us3.php.net/manual/fr/regexp .reference.assertions.php – ircmaxell