用于获取 CSS 属性的大小值的正则表达式


Regular Expression to get the size value of a CSS property?

我写了一个正则表达式来从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 值。

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

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

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

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

感谢您的帮助!

好的,所以在我问这个问题5分钟后,我想通了。使用正回溯并检查" "或分号。

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

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

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);