开发者

Regex to remove starting and ending string

开发者 https://www.devze.com 2022-12-22 05:41 出处:网络
I am working on a small app where I need to remove the starting and endingtags and I am having a little trouble getting the expression right.

I am working on a small app where I need to remove the starting and ending

tags and I am having a little trouble getting the expression right.

Currently I have this bit of code. The issue is on the second output, nothing is displayed.

<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>


The following regex worked for me:

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

It removed the first and last tag if that's what you wanted.

However, the + after the closing angle bracket suggests that you maybe meant to remove all tags at the start or end; although in the current form it would match one or more closing angle brackets. You need to use groups to change that behavior:

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

This removes all tags at the start or end of the string.


First of all sorry : this is not an answer, I can't comment yet, but I've decided to give you my 2 cents anyway. I found your problem intriguing, and looked into it a little bit.

It turns out this :

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

will match tags as expected, but this:

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

will suddenly become super greedy.

It looks like a bug to me, but I'm not sure that regarding regex I am able to distinguish a bug from a sufficiently advanced feature, which is exactly why using negated character classes like Joey did is our best bet to avoid an excess of head scratching.

0

精彩评论

暂无评论...
验证码 换一张
取 消