【发布时间】:2015-09-25 22:01:39
【问题描述】:
我想知道:如何更改 HTML 中某个单词的所有出现,但仅限于标签之外?
示例:
假设我想用<a href="#">myWordToReplace</a>替换所有出现的myWordToReplace
所以这个html
<p data-something="myWordToReplace"> myWordToReplace andSomeOtherText</p>
应该让步
<p data-something="myWordToReplace"> <a href="#">myWordToReplace</a> andSomeOtherText</p>
我试图用正则表达式来实现这一点,但这也是一团糟——我认为也许 DOM 解析器可以解决问题? 任何帮助表示赞赏?
编辑: 如果您的所有文本都包含在某些标签中,@Muhammet 的答案将起到作用 - 但如果您的部分文本没有标签,那么该文本当然不会被替换。我现在也在努力实现这一目标。
示例:如果我想将myWord 更改为someOtherWord:
Nam myWord pharetra <strong>auctor myWord</strong>
应该让步
Nam someOtherWord pharetra <strong>auctor someOtherWord </strong>
但现在它只改变了第二个词 - 强标签内的那个。
【问题讨论】:
-
为什么要投反对票? :)
-
这不是一件小事。我建议不要在这里使用纯正则表达式方法,因为那将是一个巨大的努力。为此,您需要一个状态机,并且是一个非常复杂的状态机。...改为查看 DOM 解析器,遍历元素并 然后 使用正则表达式替换每个元素内容中的模式.
-
这正是我的想法 - 但不知道如何接近,所以我问了这个问题。你说要看看 DOM 解析器吗?这是我在这里谈论的 DOM 解析器...?
-
不,纯正则表达式方法将是一个字符串解析器,因为您输入一个字符串,替换其中的单词并输出一个字符串。 DOM 解析器是别的东西,是一个真正了解 HTML 标记结构的软件组件。它将您的输入解析为您可以迭代的 DOM 树(元素树):这样做的好处是您拥有合格的对象,您可以在其中轻松区分属性和内容。像这样的东西:simplehtmldom.sourceforge.net
-
您可以发布您需要解析的 HTML 或更大的示例吗?
标签: php regex simple-html-dom