2012-06-08 53 views
1

我寫了一個正則表達式來得到一個CSS屬性大小:正則表達式來獲取CSS屬性的大小值?

/(([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i 

但由於某種原因它無法按照預期工作。例如,當我運行以下命令:

preg_match_all('/(([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i', 
"border-bottom:1px solid #99999;", $matches); 

它輸出:

1px 
99999; 

但我只想要1px的返回值。

我明白爲什麼它返回上述但似乎無法弄清楚如何返回大小而不是顏色值。我試着用以下的負回顧後發,但它不工作之一:

/(((?<!#\d{3}|#\d{6})[+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i 

我想用preg_match_all對於可以有多個大小的值(即保證金)的CSS屬性。

任何人有任何想法如何讓這個正則表達式只返回大小值?

感謝您的幫助!

+2

使用[CSS解析器](https://github.com/sabberworm/PHP-CSS-Parser)。我會說CSS像HTML可能不應該用正則表達式解析。 –

回答

1

好的,所以我問了這個問題後5分鐘我就明白了。使用積極的lookbehind並檢查「」或分號。

'/((?<=\s|:)([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i' 
0

你爲什麼不嘗試在regexp中刪除#\d{3}|#\d{6}並嘗試?

preg_match_all('/(([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i', "border-bottom:1px solid #99999;", $matches); 
+0

是的,很抱歉,這是我在第一個例子中嘗試的。我只是c&p錯誤的字符串。問題已更新。 – thiesdiggity