【问题标题】:Regular Expression to get the size value of a CSS property?正则表达式获取 CSS 属性的大小值?
【发布时间】:2012-06-12 03:57:28
【问题描述】:

我写了一个正则表达式来获取 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 属性。

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

感谢您的帮助!

【问题讨论】:

  • 使用CSS Parser。我会说像 HTML 这样的 CSS 可能不应该用 Regex 解析。

标签: php css regex


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您为什么不尝试删除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);
    

    【讨论】:

    • 是的,抱歉,这就是我在第一个示例中尝试的。我只是 c&p 错误的字符串。问题已更新。
    猜你喜欢
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多