Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
593 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 <joesmith@domain.com>

The resulting text should be

 joesmith@domain.com

Using this

<cfset reg = refind(
 "/(?<=<).*?(?=>)/s","Joe <joe@domain.com>") />

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 Reply

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 <joe@domain.com>" ) />


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.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...