1

我编写了一个正则表达式来从 CSS 属性中获取大小:

/(([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i

但由于某种原因,它没有按预期工作。例如,当我运行以下命令时:

preg_match_all('/(([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i', 
"border-bottom:1px solid #99999;", $matches);

它输出:

1px
99999;

但我只希望返回 1px 值。

我理解为什么它返回上面但似乎无法弄清楚如何只返回大小而不是颜色值。我尝试使用以下负面的lookbehind,但它也不起作用:

/(((?<!#\d{3}|#\d{6})[+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i

我想将 preg_match_all 用于那些可以具有多个大小值(即边距)的 CSS 属性。

任何人都知道如何让这个正则表达式只返回大小值?

谢谢你的帮助!

4

2 回答 2

1

好的,所以在我问了这个问题 5 分钟后,我想通了。使用正向的lookbehind 并检查“”或分号。

'/((?<=\s|:)([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i'
于 2012-06-08T04:39:12.393 回答
0

你为什么不尝试删除#\d{3}|#\d{6}你的regexp并尝试?

preg_match_all('/(([+-]?\d*\.?\d+(\s)*(px|em|ex|pt|in|pc|mm|cm)?)|thin|medium|thick)(\s|;|$)/i', "border-bottom:1px solid #99999;", $matches);
于 2012-06-08T04:12:45.193 回答