Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
591 views
in Technique[技术] by (71.8m points)

coldfusion - regex find content question

Trying to use regex refind tag to find the content within the brackets in this example using coldfusion

 joe smith <[email protected]>

The resulting text should be

 [email protected]

Using this

<cfset reg = refind(
 "/(?<=<).*?(?=>)/s","Joe <[email protected]>") />

Not having any luck. Any suggestions?

Maybe a syntax issue, it works in an online regex tester I use.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You can't use lookbehind with CF's regex engine (uses Apache Jakarta ORO).

However, you can use Java's regex though, which does support them, and I've created a wrapper CFC that makes this even easier. Available from: http://www.hybridchill.com/projects/jre-utils.html

(Update: The wrapper CFC mentioned above has evolved into a full project. See cfregex.net for details.)

Also, the /.../s stuff isn't required/relevant here.

So, from your example, but with improved regex:

<cfset jrex = createObject('component','jre-utils').init()/>

<cfset reg = jrex.match( "(?<=<)[^<>]+(?=>)" , "Joe <[email protected]>" ) />


A quick note, since I've updated that regex a few times; hopefully it's at its best now...

(?<=<) # positive lookbehind - start matching at `<` but don't capture it.
[^<>]+ # any char except  `<` or `>`, the `+` meaning one-or-more greedy.
(?=>)  # positive lookahead - only succeed if there's a `>` but don't capture it.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...