使用regex从CSS属性返回CSS值

时间:2011-07-14 22:12:05

标签: php regex

我有以下正则表达式:

$string = 'font-size:12em;';

$pattern = '@:[A-Za-z0-9.]+;@i';

preg_match($pattern, $string, $matches);

$matches返回:

Array ( [0] => :12em; )

但是,为什么:;会被退回?如何让它不返回那些冒号并仅返回CSS值12em

2 个答案:

答案 0 :(得分:1)

因为该数组中的第一个元素是整个匹配。使用捕获组和第二个元素(或使用外观)。

示例:

preg_match('/:\s*(\w[^;}]*?)\s*[;}]/', $string, $matches);
print $matches[1];

请注意,这些内容在所有情况下都不起作用。评论和更复杂的陈述可能会破坏它。

示例:

/* foo: bar; */
foo: url("bar?q=:x;");

答案 1 :(得分:0)

请改用此模式:

@(?<=:)[A-Za-z0-9.]+(?=;)@i

解释是(?<=)(?=)分别是lookbehind和lookahead groups。这意味着他们不会作为比赛的一部分被捕获。


修改用于处理%的+更多

@(?<=:)[^;]+@i