php - 为什么 str 替换仅在第一个匹配中起作用?

标签 php css preg-replace preg-match str-replace

我的代码:

$css=".class1{
    padding:1330px 2220px 0 auto;
    padding:10px auto 0 20px;
    padding:101px auto 0 200px;
}";

$search=self::extract_unit($css,"padding:",";"); 

extract_unit:该函数提取[padding:]和[;]之间的内容

将返回 1330px auto 0 2220px

$replace=self::resort_padding_margin($search);

resort_padding_margin:该函数对内容进行排序

将返回 1330px 2220px 0 自动

$css = str_replace($search, $replace, $css);
echo $css;

当我应用此代码时,结果将显示如下:

.class1{
    padding:1330px auto 0 2220px;
    padding:10px auto 0 20px;
    padding:101px auto 0 200px;
}

那么我如何使用此方法来应用所有填充以像这样显示

.class1{
    padding:1330px auto 0 2220px;
    padding:10px 20px 0 auto;
    padding:101px 200px 0 auto;
}

最佳答案

为此,您的 self::extract_unit 方法必须返回一个数组,每次 padding 出现一个元素。

然后你的 self::resort_padding_margin 应该接受搜索数组并返回另一个经过修改的数组。或者,在主代码中编写一个循环,并将每次调用此方法的结果存储在数组中。

完成后,您可以将两个数组传递给 str_replace

顺便说一句,CSS 应该只有一个 padding 定义。你有三个,这有点奇怪:)

关于php - 为什么 str 替换仅在第一个匹配中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10665691/

相关文章:

php - Like 查询中的字符串转义不起作用(CodeIgniter)

php - 基本的PHP密码保护

php - 错误的T-SQL查询时sqlsrv_query不会返回false

css - 为移动、屏幕和打印提供不同样式表的简单方法

html - 您认为将菜单导航栏居中很容易吗?

php - 如何使用 preg_replace 创建 mysql 格式的日期并在日期小于 10 时填充 0

php - yii2 Controller Action 注入(inject)是如何工作的

javascript - 为什么速度动画只能工作一次?

php - 使用正则表达式从内容中删除 HTML 注释

php - 替换换行符,但保留空行