2011-04-14 56 views
2

我有一個CSS樣式,我需要使用Java正則表達式提取顏色。如何使用正則表達式提取CSS顏色?

color:#000; 

我需要提取的東西:;。任何人都可以舉個例子嗎?

+0

您可以使用/(#[0-9a-f] +)/ – Deck 2011-04-14 16:02:52

回答

2

我不知道如何將它運用到Java,而是一個正則表達式來做到這一點是:

^color:\s*(#[0-9a-f]+);?$

+1

在旁註上:此變體將與冒號後面帶有一個或多個空格的更常見版本不匹配 - 例如:'background-color: #FFF;'。另請注意,在選擇器的最後一個語句之後,分號可能不存在,並且可能應該是可選的。 (還有更多的問題,如匹配顏色定義爲'rgb [a]'值或命名的顏色,但它們不一定適合此問題的範圍。) – polarblau 2013-11-22 12:25:30

+1

@polarblau,我更新了正則表達式以允許可選空格和半-結腸。我同意你的最後一點不在這個問題的範圍之內。 – gjb 2013-11-22 18:27:08

+0

非常感謝您的更新! – polarblau 2013-11-26 09:24:34

-1
/(?<=:).+(?=;)/ 

這會爲你做它

不知道如何你在Java中實現正則表達式。

www.regexr.com幫助你實時發佈你的正則表達式。

-1

表達

":(#.+);" 

應該這樣做

+0

我想知道爲什麼人們投票否定,表達是正確的,它不是錯誤的 – Miquel 2011-04-14 16:09:23

+0

是的,但它比所需要的更貪婪;更好,更安全地匹配數字;正則表達式會更快,更準確。 – 2011-04-14 17:13:59

+0

我同意這可能會更好,但這是本網站的目的,以便他可以選擇並接受另一個答案,您的論點不能證明我的觀點爲負面投票,但這又是一個意見。 – Miquel 2011-04-15 21:37:58

1

爲了剛剛提取:高達;做這樣的事情:

Pattern pattern = Pattern.compile("[^:]*:(.*);"); 
    Matcher matcher = pattern.matcher(text); 
    if (matcher.matches()) { 
     String value = matcher.group(1); 
     System.out.println("'" + value+ "'"); // do something with value 
    } 
  • [^:]* - 任意數量的字符的不在':'
  • : - 一個 ':'
  • (...) - 捕獲組
    • .* - 任何數量的任何字符
  • ;的 - 終止 ';'

使用color:(.*);只接受'顏色'的值。