2010-03-05 145 views
1

我正在一个小应用程序,我需要删除开始和结束
标签,我有一点麻烦,得到正确的表达式。正则表达式来删除开始和结束字符串

目前我有这一点的代码。问题出在第二个输出上,没有显示。

<cfcontent reset="true"/> 
<cfset myStr = '<br> <br> <br> <br> This is a great Test<br> do you like my test? <br><br><br>'> 


<cfoutput>#myStr#</cfoutput> 

<cfset myNewString = REReplaceNoCase(myStr, '(^<.*?>+)|(<.*?>+$)', '' ,'ALL')> 

<cfoutput>New: #myNewString#</cfoutput> 
+0

您是否有保证字符串中存在的标签不会包含属性?例如,如果myStr是'
Link
'会怎么样。正则表达式只适用于这么多。 – 2010-03-05 22:09:36

回答

1

下面的正则表达式为我工作:

(^<[^>]*?>+)|(<[^>]*?>+$) 

它可以除去第一和最后一个标签,如果这就是你想要的。

但是,+在关闭角括号之后表明您可能打算在开始或结束时删除全部标签;尽管在当前形式下它将匹配一个或多个闭角尖括号。您需要使用组来改变该行为:

(^(<[^>]*?>\s*)+)|((<[^>]*?>\s*)+$) 

这将删除字符串开头或结尾的所有标签。

+0

像魅力一样工作。感谢您的帮助。 – Tempname 2010-03-05 22:11:35

+0

不客气。不过,我并没有弄清楚为什么你的变体会删除所有的东西。 – Joey 2010-03-05 22:34:56

0

首先抱歉:这不是一个答案,我还没有评论,但我决定给你我的2美分。我发现你的问题很有趣,并对它进行了一点研究。

事实证明这一点:如预期

<cfset multipleMatches = REReplaceNoCase(myStr, '(<.*?>+)', '- Match -' ,'ALL')> 

将匹配的标签,但这样的:

<cfset singleMatche = REReplaceNoCase(myStr, '(<.*?>+$)', '- Match -' ,'ALL')> 

会突然变得超级贪婪。

它看起来像一个错误,但我不确定有关正则表达式我能够区分一个错误与足够先进的功能,这正是为什么使用像乔伊这样的否定字符类做的是我们最好的选择避免头部过度划伤。

相关问题