【问题标题】:coldfusion : Regex to match words and replace & change linkColdfusion:正则表达式匹配单词并替换和更改链接
【发布时间】:2016-04-22 11:49:15
【问题描述】:

我必须挑战正则表达式。

  • 问题:1

如果在我的 HTML 中,我如何替换 href="http://myserver.com" [点击这里]。例如: <a target="_blank" href="http://myserver.com" style="text-decoration: none; color: #fff;">Click here</a>

替换为

<a target="_blank" href="##" style="text-decoration: none; color: #fff;">Click here</a>

  • 问题:2

在我的 HTML 中,我必须搜索关键字 ** ^mytag^ ** 并替换为一个值。 目前我正在循环中一一替换。

当前代码: #replace(MYHTMLcontent,"^mytag^","Name","All")#

如果我可以搜索我所有的 html 关键字(在我的情况下类似于 ^keyword^)并添加到结构中,有没有办法。

谢谢

已编辑:添加我正在处理的新代码,如果有人可以帮助我,我会卡住。它正在替换我的 HTML 中的所有链接。

 <cffunction name="htmlurl" returntype="any" >
    <cfargument name="aHTMLTemplate" required="yes" type="any" default="">
    <cfargument name="addr" required="yes" type="any" default="http://url.com">  <!--- OR ## --->
    <cfset regex    = createObject("java", "java.util.regex.Pattern").compile('href=\"[^\"]+\"')>
    <cfset result   = createObject("java", "java.lang.StringBuilder").init()>
    <cfset var htmlcont     = arguments.aHTMLTemplate />
    <cfset var toReplaceURL = arguments.avolurladdr />


    <cfset matcher  = regex.matcher(htmlcont)>
    <cfset last     = 0>

    <cfloop condition="matcher.find()">
        <cfset result.append(
            htmlcont.substring(
                last,
                matcher.start()
            )
        )>
     <cfset token = matcher.group(
            javaCast("int", ( matcher.groupCount() gte 1 ? 1 : 0 ))
        )>

            <cfset token = ("<a href='"& toReplaceURL & "'")>

        <cfset result.append(token)>

        <cfset last = matcher.end()>
    </cfloop>
    <cfset result.append(htmlcont.substring(last))>
    <cfset result = result.toString()>
    <cfreturn result>
    </cffunction>

【问题讨论】:

  • 我看不到任何问题。
  • 我看到了两个问题。 (看来帖子已被编辑。)

标签: java regex coldfusion coldfusion-9 cfml


【解决方案1】:

好吧,我对 Coldfusion 一无所知。但是使用纯 Java,您可以执行以下操作:

问题 1:

String replaced = "";
if(element.matches("<a [^>]+>Click here</a>") {
  replaced = element.replaceAll("href=\"[^\"]+\"", "href=\"##\"");
}

正则表达式检查给定的字符串是否是单击此处的链接。然后,它将 href 的“...”之间的所有内容替换为 ##。

问题 2:

String replaced = element.replaceAll("\^[^\^]+\^", "NAME");

正则表达式检查是否有一些 ^anything^ 任何地方并将其替换为 NAME。如果您不熟悉正则表达式:[ 和 ] 之间的部分匹配任何不是 ^ 的内容。不过看起来有点搞笑。

希望这个回答对你有帮助。

【讨论】:

    【解决方案2】:

    功能:

        <cffunction name="tmurlReplace" returntype="any" >
    <cfargument name="HTMLCont" required="yes" type="any" default="">
        <cfargument name="toreplaceURL" required="no" type="any" default="http://YOurURL.com">
        <cfset var ehtml = arguments.HTMLCont>
        <cfif refind("<a [^>]+>click here</a>",ehtml,1)>
            <cfset ehtml =  REReplace(ehtml, 'href=\"[^\"]+\"', "href='#toReplaceURL#'", "ALL") >
        </cfif>
        <cfreturn ehtml>
        </cffunction>
    

    函数调用:

    `tmurlReplace(HTMLCont=MyHTMLCode)`
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-27
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多