我正在寻找 php 中 preg_replace 的正则表达式,它用缩小的类名替换 html 文件中的类名。我在 css-minifying 过程中执行此操作。 我得到了一个关联数组,其中类名作为键,替换项作为值。 即:
$myReplacements = array('fonts' => 'f',
'标签' => 'l',
'小' => 't')
这些替换应该只在完全匹配的情况下进行,而不是在像“fonts-small-size”这样的类上进行。我的正则表达式是:
/"((.*[^"]?)?(\} | |\}))?fonts(( \{| |\{)(.*[^"])?)?"/
用替换正则表达式:
"$2$3f$5$6"
--
我得到了第二个带有替换的关联数组,对于仅以它开头的类也应该这样做:
$forcedReplacements = array('ui-icon-' => 'ui-')
这种替换应该在像“ui-icon-thumbs-up”这样的类上完成,并且应该替换为“ui-thumbs-up”。我的正则表达式是:
/"(.*)ui-icon-(.*)"/
用替换正则表达式:
"$1ui-$2"
我要替换此类名称的 HTML 文件具有以下内容:
{if !$isSmallFontCheckDisabled}
<span class="{if $smallFontFromCharacters}fonts tiny{/if}{if $hasStandardLabel} fonts label{/if}">
{/if}
这是我的一个模板文件的一个小片段。如您所见,我使用 smarty 作为模板引擎。因此,在我的正则表达式中也必须考虑聪明的语法。
在大多数情况下,替代品工作得很好。如果我的模板文件的类属性包含相同的类两次,我就会遇到问题(如果我有 if/else-smarty-block 可能会发生这种情况)。然后两者中只有一个被替换。
上面的模板片段被替换为:
{if !$isSmallFontCheckDisabled}
<span class="{if $smallFontFromCharacters}fonts t{/if}{if $hasStandardLabel} f l{/if}">
{/if}
谁能帮我用我的正则表达式来替换所有出现的模板?
最佳答案
你不想使用 preg_replace,你想使用 preg_replace_callback()。 将类属性从标签中拉出,按空格拆分,处理结果数组的每个元素,然后将其粘贴回一起。 像这样的……
$line = preg_replace_callback(
'/(<[^<] class=\")([^"]*)(\")/',
function ($matches) {
$classes = explode(' ', $matches[2])
/*
Do your class name replacements here
*/
return $matches[1].(implode(' ', $classes)).$matches[3];
},
$line
);
关于php - 用于替换 html 代码中的 css 类的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24547747/