2010-03-05 101 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')> 

會突然變得超級貪婪。

它看起來像一個錯誤,但我不確定有關正則表達式我能夠區分一個錯誤與足夠先進的功能,這正是爲什麼使用像喬伊這樣的否定字符類做的是我們最好的選擇避免頭部過度劃傷。

相關問題