我有以下正则表达式:
$string = 'font-size:12em;';
$pattern = '@:[A-Za-z0-9.]+;@i';
preg_match($pattern, $string, $matches);
$matches
返回:
Array ( [0] => :12em; )
但是,为什么:
和;
会被退回?如何让它不返回那些冒号并仅返回CSS值12em
?
答案 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