2010-07-28 66 views
2

我想從字符串中提取CSS位置結束 - 例如:正則表達式匹配浮點數不

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

的問題是,該字符串還包含一個角度「360deg」。我不希望任何數字後跟「deg」以便與正則表達式匹配。目前,我有:

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

這所有的數字(增量的角度 - 這是我不想要的。)相匹配。我已經使用負先行嘗試:

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

但這似乎只刪除360deg結束零 - 即360deg => 36

有誰知道爲什麼負前瞻不能成功地消除了角?

回答

2

正則表達式匹配,因爲它發現兩個數字後面跟着「deg」:36後面跟着0,那不是「deg」。 [0-9]*通常是貪婪的,但如果這導致匹配失敗,它會嘗試選擇匹配較少數字的替代品。

您可以排除模式改成這樣:

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

那出色的作品。謝謝! – Homar 2010-07-28 18:40:20

0

嘗試增加你的話boundry:

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