0

我想通过相关主题链接我的描述中出现的主题......现在我在这里使用 preg_replace() 来做同样的事情,但现在我需要帮助来格式化正则表达式模式来做到这一点......

因为我面临的挑战是:

1)描述可以包含所有类型的html标签

2)我的替换功能不应该替换标签和标签之间的任何东西

3)它不应该替换任何带有描述的标签的任何属性......比如如果有字符串Style和Beauty,如果我想链接Style作为我的主题..所以在这种情况下它不应该链接'style'属性相反,它应该从“Style and Beauty”字符串链接 Style

对上述查询的任何帮助将不胜感激....

提前致谢...

4

2 回答 2

1

根据输入的格式,使用 PHP 中可用的DOMParser类或几个 XML 解析库之一。

于 2012-11-23T12:08:42.853 回答
0

详细说明我的评论:正则表达式不适合有状态或递归解析,也就是说,它们可以以非常高级的方式进行匹配,但是任何需要递归或状态的东西,最值得注意的是,任何类似于树的东西,都不能使用正则表达式进行解析。一些正则表达式方言(例如 Perl 正则表达式)具有反向引用和其他结构,这些结构将正则表达式扩展到严格的正则解析之外,但即使有了这些,事情充其量也是痛苦的。

相反,做理智的事情:找到一个可以处理您的输入的 DOM 解析器(例如 PHP 自己的 DOMDocument API),然后对生成的 DOM 树进行处理。一种行之有效的方法是递归遍历您的 DOM 树,然后在每个节点处查看它是否是文本节点;如果是,请将您的简单搜索和替换逻辑应用于其内容,否则下降到它和/或保持不变。或者,您可以向它抛出一个 XPath 表达式以提供文本节点,然后直接更改它们。或者,您可以将合适的替换函数挂接到 XslProcessor 中并在 XSLT 中进行替换 - 如果您熟悉 XSLT,这相当简单,但如果您不熟悉,DOM walker 可能更容易实现。

于 2012-11-23T15:23:55.653 回答