HTML首先通过净化器运行(tinyMCE + Wordpress),因此它应该与某些标准形式匹配。所有脚本和样式标签都被剥离,标签内的所有数据都是html_encoded,因此不需要担心无关的符号。
我知道用正则表达式解析html的一般立场是“不要”,但在这个具体的例子中,问题似乎不像解析,更像是简单的字符串处理...我错过了一些看不见的级别复杂?
就我可以分解而言,似乎有问题的模式可以分解为逻辑组件:
/<[a-zA-Z][^>]+
- 匹配任何html标记的开头以及其中的任何标记和属性组合,但不包括结束括号(?i:class)=\"
- 类属性的开头,不区分大小写(?:
- 启动非捕获子模式(?: *[a-zA-Z_][\w-]* +)*
- 任意数量的类名(或无),但如果存在,则在捕获之前必须有空格( *
。implode('|',$ classes)。*)
- 要捕获的类集,preg_quoted (?: +[a-zA-Z_][\w-]* *)*
- 任意数量的类名(或无),但如果存在,则捕获后必须有空格)+
- 关闭非捕获子模式并循环它以防多个匹配类在一个属性中\"(?: [^>]*)>/
- 类属性的结尾,以及html标记末尾的所有内容制作最终的正则表达式:
$pattern = "/<[a-zA-Z][^>]+ (?i:class)=\"(?:(?: *[a-zA-Z_][\w-]* +)*( *".implode('|', $classes)." *)(?: +[a-zA-Z_][\w-]* *)*)+\"(?: [^>]*)>/";
我还没有尝试过运行它,因为我知道它是否有效,我会非常想要使用它,但通过preg_replace
运行它似乎应该可以完成这项工作,除了一个小问题。我相信它会在捕获区域周围留下无关的空白。这不是一个重要问题,但如果有人知道如何,可能会避免这种情况。
还应该注意的是,这不是一个关键任务的过程,如果我的捕获偶尔无法移除类,那么没有人会死。
所以,实质上......有人可以解释在这种情况下是什么让这个坏主意?
答案 0 :(得分:0)
好的,那是你要从给定的html中删除的类名列表吗?
我想说的是,您要删除的给定类名列表是什么。你能给出一个典型的html的例子,它是什么,以及你想要改变它的内容。 例如:
在
if(re.IsMatch(seg.status)){ //... }
更改为
<div class="someClass">
<i class="dontchange doChange"></i>
<a class="hello john"></a>
</div>
答案 1 :(得分:-1)
这将替换所有html中的所有类。
myHtml.replace(/class\=\"[^\"]*\"/g,'');
这是你在找什么?还是更具体的东西?