屬性我有以下的正則表達式:返回從CSS的CSS值使用正則表達式
$string = 'font-size:12em;';
$pattern = '@:[A-Za-z0-9.]+;@i';
preg_match($pattern, $string, $matches);
$matches
回報:
Array ([0] => :12em;)
但是,爲什麼是:
和;
回來了?我怎樣才能得到它不返回這些冒號,只返回CSS值12em
?
屬性我有以下的正則表達式:返回從CSS的CSS值使用正則表達式
$string = 'font-size:12em;';
$pattern = '@:[A-Za-z0-9.]+;@i';
preg_match($pattern, $string, $matches);
$matches
回報:
Array ([0] => :12em;)
但是,爲什麼是:
和;
回來了?我怎樣才能得到它不返回這些冒號,只返回CSS值12em
?
由於該數組中的第一個元素是整個匹配。使用捕獲組,並使用第二個元素(或使用lookarounds)。
例子:
preg_match('/:\s*(\w[^;}]*?)\s*[;}]/', $string, $matches);
print $matches[1];
注意,這樣的事情不會在所有情況下工作。評論和更復雜的陳述可能會打破它。
例子:
/* foo: bar; */
foo: url("bar?q=:x;");
使用這個模式來代替:
@(?<=:)[A-Za-z0-9.]+(?=;)@i
的解釋是,你(?<=)
和(?=)
分別回顧後和預讀組。這意味着他們不會被捕獲爲比賽的一部分。
編輯爲了處理%
的+更多
@(?<=:)[^;][email protected]
行之有效。但是,當我在'width:10%'上嘗試它時,它似乎沒有返回任何值?也許'%'是一個特殊的字符? – Abs
這是一個很好的觀點,我真正需要的是以'em'和'px'結尾的CSS值 - 也許我應該用這些來縮小範圍?你將如何在你的正則表達式中實現這一點? – Abs
@Abs,試試'/:\ s *(\ w [^;}] *?(?: em | px))\ s * [;}] /' – Qtax