gpt4 book ai didi

php - 用于替换 html 代码中的 css 类的正则表达式

转载 作者:行者123 更新时间:2023-11-28 03:20:51 24 4
gpt4 key购买 nike

我正在寻找 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com