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