java - 如何使用 ColdFusion 替换 HTML 中的文本而不替换 HTML 标签?

标签 java regex coldfusion html-parsing

我有一个 html 源作为字符串变量。 还有一个单词作为另一个变量,将在该 html 源代码中突出显示。

我需要一个正则表达式,它不会突出显示标签,但会突出显示标签内的文本。

例如我有一个像这样的 html 源

<cfset html =  "<span>Text goes here, forr example it container also **span** </span>" />
<cfset wordToReplace = "span" />
<cfset html = ReReplace(html ,"[^(<#wordToReplace#\b[^>]*>)]","replaced","ALL")>

我想要得到的是

<span>Text goes here, forr example it container also **replaced** </span>

但是我有一个错误。任何提示!

最佳答案

I need a Regular Expression which does not highlights tags, but obly text within the tags.

你找不到一个。没有一个对所有合法/野生 HTML 都完全可靠。

原因很简单,正则表达式匹配 Regular languages ,而 HTML 根本就不是正则语言。

即使您非常小心,您也会面临替换您不想替换的内容以及不替换您想要替换的内容的风险,这仅仅是因为 HTML 语法非常复杂。


解析 HTML 的正确方法是使用专门构建的 HTML DOM 解析器。

令人烦恼的是,CF 没有内置的,但如果您的 HTML 是 XHTML,那么您可以使用 XmlParseXmlSearch 来允许您仅对与您的文本匹配的文本(而不是标签)进行 xpath 搜索...某事就像 //*[contains(text(), 'span')] 应该做的那样(more details here)。

如果您还没有 XHTML,那么您需要考虑使用 Java 的 HTML DOM 解析器 - Google 提供了很多解析器(我还没有尝试过,所以无法给出任何具体建议)。

关于java - 如何使用 ColdFusion 替换 HTML 中的文本而不替换 HTML 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211937/

相关文章:

javascript - 如何在 jQuery 中使用正则表达式

coldfusion - 我不能用 cfftp 放置文件,有什么想法吗?

coldfusion - 我们可以在 cftransaction 中编写的数量查询/语句是否有任何限制?

algorithm - ColdFusion - 搜索结构数组的有效方法是什么?

javascript - 需要 javascript 正则表达式来表示金额和小数以及百分比增加

javascript - JavaScript 中重量(公斤)的正则表达式

java - JAR 和包之间有什么区别?

java - 当访问子类型的属性时,Hibernate 会跳过父类(super class)型的实例

java - 从 Aar 模块 Android 执行 Handheld 类中的方法

java - 正则表达式正在创建一个不应该存在的空数组