2014-05-07 52 views
-1

我掙扎着爬在.LESS文件,如特定的字符串:腓找到一個特定的正則表達式

@underlineTitle:none; 
@fondContent:#eeeeee; 
@colorContent:#5D5D5D; 
@fondField:#ffffff; 

比如我想@fondContent:後立即拿到#eeeeee,直到;,但我可以沒有找到如何。即使嘗試這種沒有按預期工作:

preg_match('%@fondContent:(.*)%i', $source, $output); 

UPDATE下面是我的電流輸出:

0: "@fondContent:#eeeeee;" 
1: "#eeeeee;" 
+1

你會得到什麼輸出? – aelor

+0

我更新了我的問題 – lightalex

+0

那又怎麼了?你正在得到你想要的東西 – aelor

回答

1

當我看到它,你有兩個選擇:

  • 要麼繼續使用(.*)並告訴在哪裏停止 - 所以在羣組後添加一個;
  • 或如Amal Murali在此處的評論中建議使用([^;]+)[^;]+匹配不在(^;任何字符
%@fondContent:(.*);%i 
%@fondContent:([^;]+)%i 
+2

或者使用'([^;] +);'。 –

+1

實際上'(。*)'可以正常工作,因爲'.'與換行符不匹配。 –

+0

@NiettheDarkAbsol好的,但它保證每行只有一條語句嗎? (在OP的例子中,我知道) – kero

1

你可以使用這個表達式:

%(?<[email protected]:)(#[a-z\d]+)%i 

背後@fondContent:與以上內容,然後匹配(和捕獲)# +字母或數字字符。

+0

我不確定是否使用'\ w'是個好主意。 「*字母和數字的定義由PCRE的字符表控制,並且如果發生了特定於語言環境的匹配**,則可能會有所不同。例如,在」fr「(法語)語言環境中,某些字符代碼大於128用於重音字母,這些匹配\ w。*「 - [Source](http://php.net/manual/en/regexp.reference.escape.php)。 –

+0

@A,編輯它。謝謝 –

1

%@fondContent:(.*);%i把那個分號結束,這樣它就不會拍攝組內

1

你可以試試這個:\@fondContent:\s?#([abcdefABCDEF0-9]{6}|[abcdefABCDEF0-9]{3});

驗證真實色彩(AF 0-9)

\@fondContent:\s?#([abcdefABCDEF0-9]{6}|[abcdefABCDEF0-9]{3}); 

Regular expression visualization

Debuggex Demo

@fondContent: #Ef3dee; // valide 
@fondContent:#Ef3dee; // valide 
@fondContent: #ZZ3dee; // not valide 
@fondContent: #Ef3deee; // not valide 
@fondContent: #Ef3; // valide 
+0

爲什麼不是'#eee'有效? –

+0

因爲我添加了特定的「{6}」。所以它需要6個字符長。您可以將其更改爲「{3,6}」,但它會驗證3到6個字符之間的所有字符。 –

+0

我知道它爲什麼不匹配,我問爲什麼它*不應該*。 '#eee'是有效的。 –