2014-02-24 62 views
0

我想一個正則表達式匹配(請注意,我不關心php的功能和用法,我的擔心是正則表達式和我已經給出了PHP的線索來澄清用法):正則表達式(php)匹配CSS規則內的屬性

匹配規則,如果它包含屬性「高度」在它。我主要寫什麼:

^.nav+(.*)+({)+(.*) 

但我不應該怎麼之後...... 這裏寫的是我們的主題:

.nav,[role~=navigation]{ 
    clear:both; 
    background:lightgrey; 
    color:#5a5a5a; 
    border:1px solid #c6c6c6; 
    -o-border-radius:4px; 
    border-radius:4px 
} 

.nav:after,[role~=navigation]:after{ 
    content:" "; 
    display:block; 
    height:0; 
    font-size:0; 
    clear:both; 
    visibility:hidden 
} 

.nav a,.nav a:visited,.nav button{ 
    background:lightgrey; 
    color:#5a5a5a; 
    cursor:pointer; 
    padding:.25em 1em; 
    text-decoration:none; 
    cursor:pointer; 
    line-height:1.5; 
    border:0; 
    border-top:1px solid #c6c6c6; 
    -o-border-radius:0; 
    border-radius:0 
} 

回答

1

你可以嘗試這樣的事:

^\.nav.*?\{[^}]+(?<=[\s;])height\s*:[^}]+\}

匹配整體.nav CSS規則塊。 (^\.nav.*?\{[^}]\}部分)在它的內部,我們添加一個height:和一個後視,以斷言前一個字符是;或空白。然後我們需要吞噬其餘的角色來匹配整個街區。

如果你想要做的就是發現那些在他們height規則塊,不符合整個塊,那麼以下就足夠了:

^\.nav.*?\{[^}]+(?<=[\s;])height\s*:

注意.具有特殊的意義在正則表達式中,匹配.nav匹配nav前面有任何字符,以匹配一個完整的停止字符,我們需要將其轉義:\.

+0

只是一個問題,你不需要寫'他ight \ s +:'而不是'height:'?我從來沒有嘗試過,但我認爲應該可以在那裏寫空白。 – iCore

+0

我認爲最好使用文字字符作爲可讀性的空間 –

+0

我認爲你是對的,因爲你可以在那裏有空間。 '+'表示1或更多,所以'\ s +'會**需要**空間。不過's *'會吞噬任何空格(儘管它可能會匹配換行符,也取決於正則表達式的設置/風格)。我會更新我的答案。 – rvalvik

1

這不是測試,但也許你可以看到從這一草案的想法:

.nav.*?{([^}]*;|\s*)height 

在這裏,我們檢查,如果height關鍵字{;後發現的(所以它是一個公關operty名稱)。

1

試試這個

.nav.*{.*(\bheight\s*:.*;).*}