【问题标题】:How to read all numeric values from within a file in php?如何从php中的文件中读取所有数值?
【发布时间】:2014-03-03 17:54:22
【问题描述】:

我有一个带有数值的 CSS 文件,其中附加了 px,例如“width: 500px;”。我需要使用 php 从头到尾读取这个文件,并在任何找到的地方更改所有数值。即将 500px 转换为 50%(宽度:250px)。我们怎样才能做到这一点,也许使用正则表达式。

$file = fopen("file.css", "r+") or exit("Unable to open file!");
while(!feof($file))
{
if(numeric value between space and px)
//replace by its 50%
}
fclose($file);

这段代码只是为了解释问题,解决方案可能完全不同。

【问题讨论】:

  • 也许你应该看看is_numeric()
  • No is_numeric() 在这种情况下不起作用。
  • 您可能只使用 php 来更改 CSS 中的文本。使用 mycss.php 文件将为您提供可能比使用替换解析更可靠和更快的变量。也就是说,如果这不是一次性的事情。如果您需要经常更改这些值,我建议您使用 php 文件。

标签: php css regex


【解决方案1】:

使用preg_replace_callback:

$str = preg_replace_callback('/:\s*(\d+)px/', 
    function($m) {
        return ': '.($m[1]/2).'px';
    },
    $str);

【讨论】:

  • 为什么需要px\b\d+ 将选择所有数字就好了,包括 em 等...
  • @Robin:OP 只想转换 px 中的值。
【解决方案2】:

您可能正在寻找的正则表达式是

^[\d]*(\.\d*)?(px)?(%)?(em)?$

或没有十进制值

^[\d]*(px)?(%)?(em)?$

这应该匹配所有尺寸。如果您还想要颜色(RGB/RGBA 格式),请查看this question,这可能会激发您的灵感。

【讨论】:

  • 等等,需要考虑十进制数。我会尽快更新。
  • [...]\d 周围是没用的,这已经是[0-9] 的快捷方式了。
  • @Robin 是的。感谢您的评论。
猜你喜欢
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 2010-12-23
  • 2018-02-23
  • 2013-11-27
相关资源
最近更新 更多