【问题标题】:ColdFusion RegEx Replacing Tags within a stringColdFusion RegEx 替换字符串中的标签
【发布时间】:2012-03-20 20:55:12
【问题描述】:

我正在尝试替换字符串中的实际开始/结束标签。
例如,我想替换

<p class="style4">My Title Is This<p>


<h2>My Title Is This</h2>


我写了下面的代码,它似乎在我的字符串中正确找到了标签,但它用&lt;h2&gt;(.+?)&lt;/h2&gt;<br><br><pre>&lt;cfset this.text2 = ReReplaceNoCase(getThis.statictext, '&lt;p[^&gt;]+class="style4"[^&gt;]*&gt;(.+?)&lt;/p&gt;', '&lt;h2&gt;(.+?)&lt;/h2&gt;', "ALL")&gt;</pre>替换它

谁能告诉我这里缺少什么?

谢谢

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow!请花一点时间了解编辑器中令人敬畏的文本格式选项(单击? 图标)。例如,要将文本格式化为代码,只需将其粘贴、突出显示,然后按 Ctrl-K。无需自己转义所有 HTML 实体。时间花得很好......

标签: regex coldfusion


【解决方案1】:

代替这个:'&lt;h2&gt;(.+?)&lt;/h2&gt;',您需要使用反向引用 \1 来引用子表达式 (.+?)

<cfset this.text2 = ReReplaceNoCase(getThis.statictext, '<p\s[^>]+class="style4"[^>]*>(.+?)</p>', '<h2>\1</h2>', "ALL")>

希望这会有所帮助。

更新:根据 Mike Causer 的以下建议进行编辑。

【讨论】:

  • 您可能希望在打开 '&lt;p 之后添加一个 \s,因为您不希望它匹配 &lt;p*class="style4"... 但匹配 &lt;p *class="style4"...
  • @MikeCauser,真的!接得好。我认为可能发生这种情况的唯一情况是&lt;pre&gt; 标签,但将来可能会定义其他标签。
【解决方案2】:

这会找到所有标签并删除它们,您可以轻松修改它以进行替换。

<!--- 
# STRIPTAGS
# Strip all html tags from a string 
# Receive string and return string with any and all tags striped out
--->
<cffunction name="stripTags" access="public" output="false" returntype="string" hint="Remove all HTML tags from string">
    <cfargument name="string" type="any" required="true"  hint="String to clean"/>
    <cfset var pattern = "<[^>]*>">
    <cfreturn REReplaceNoCase(arguments.string, pattern, "" , "ALL")>
</cffunction>

【讨论】:

  • 我并不是要剥离所有标签,我实际上是想用另一组打开/关闭标签替换。为了更好地解释,我修改了我的信息。
  • 我认为&lt;[^&gt;]+&gt; 会比&lt;[^&gt;]*&gt; 工作得更好,因为后者可以匹配&lt;&gt; 的实例,而前者可以匹配实际标签。但是,它仍然可以匹配 &lt;1&gt; 这样的非标签。
猜你喜欢
  • 1970-01-01
  • 2018-04-08
  • 2013-05-11
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多