2010-07-28 7 views
2

Je suis en train d'extraire des positions CSS à partir d'une chaîne - exemple:expressions régulières nombres à virgule flottante se terminant pas avec

"top left bottom right center 0 0% 50% 100% 360deg 15.5% -16.3%" 

Le problème est que la chaîne contient également un angle « 360deg ». Je ne veux pas que les nombres suivis de "deg" soient assortis par l'expression régulière. Actuellement, j'ai:

(-?([0-9]*\.[0-9]+|[0-9]+))|(center)|(top)|(left)|(bottom)|(right) 

Ceci correspond à tous les nombres (y compris l'angle - que je ne veux pas). Je l'ai essayé d'utiliser un test avant négatif:

(-?([0-9]*\.[0-9]+|[0-9]+))(?!deg)|(center)|(top)|(left)|(bottom)|(right) 

Mais cela ne semble enlever le zéro de 360deg fin - à savoir 360deg => 36

Est-ce que quelqu'un sait pourquoi la préanalyse négative ne réussit pas à éliminer l'angle ?

Répondre

2

L'expression régulière correspond parce qu'elle a trouvé deux chiffres non suivis par "deg": Le 36 est suivi par 0 et ce n'est pas "deg". Le [0-9]* est généralement gourmand mais si cela provoque l'échec de la correspondance, il essaiera des alternatives correspondant à moins de chiffres.

Vous pouvez changer le négatif à ce test avant:

(?!deg|[0-9.]) 
+0

qui fonctionne avec brio. Je vous remercie! – Homar

0

Essayez d'ajouter votre mot boundry:

(-?([0-9]*\.[0-9]+|[0-9]+)\b)|(center)|(top)|(left)|(bottom)|(right) 
Questions connexes