从<code> block</code>之外的任何内容中删除所有空格,换行符和标签

时间:2010-12-16 00:58:45

标签: php regex compression

好的,我正在运行此脚本,以从我的最终HTML输出中删除所有多余的空格,换行符和标签:

$html = preg_replace(array("/\t/", "/\s{2,}/", "/\n/"), array("", " ", " "), $html);

但是,我遇到的问题是我的代码块与此处的代码块类似,因此会缩进。它将整个代码放在一行上,所以我想知道如何运行上面的代码,但仅限于未包含在<code></code>标签中的文本,这是我需要的唯一元素。我知道如果它是代码块中的文本,如何做到这一点,但我有点迷失在如何处理代码块之外的文本。

我提出的唯一合理的事情是删除所有代码块,然后进行替换并重新放入代码块。

1 个答案:

答案 0 :(得分:3)

我会避免单独使用正则表达式。我敢肯定有人会发布一个半生不熟的正则表达式,它将是1)不可维护的或2)错误的(或两者兼而有之),但实际上,你需要lex输入令牌并根据它输出在那些令牌构造的上下文中。

我有一个工具可用于从现有HTML创建HTML实体。例如,它会将I'm变为I&#8217;m,只要它在更改该实体有意义的上下文中(例如,不在&lt; code&gt;块中,而不在URL中等)

我刚从旧的,尘土飞扬的Subversion存储库导入到Github,这里:https://github.com/scoates/lexentity

以下是使用中的lexentity示例:http://files.seancoates.com/lexentity/(我们将其用于http://phpadvent.org/处的文章)

所有这些都表明,在我看来,像这样的系统将创建一个比纯正则表达式系统更灵活,更强大的解决方案。您必须为您的目的修改lexentity,但可以根据需要随意借用。

取值