Hi everybody, i'm using regular expressions to filter thing from a String. Can a regular expression be recursive? I need a expression (that works in org.apache.regexp.RE) that parses something like a function. A function starts with '${' and ends with '}'. But in the text between there can also be new 'instances' of ${...} Eg. When parsing the string "bla bla${bla ${bla} ${bla}}bla ${bla} bla" the first thing the epxression needs to give me is "${bla ${bla} ${bla}}" I'm not very good with expression and have been using \$\{.+?\} as an expression at the moment, but that wont give me the right results. Does anybody have a good idea for a working expression? Or should i be writing my own parsing routine? Thanks in advance, Robert Willems
moving this to the Java In General (Intermediate) forum for two reasons: 1- this isn't a very advanced question. 2- Max Habibi is a moderator there and he wrote a whole book on Regular Expressions!
Alan Moore
Ranch Hand
Joined: May 06, 2004
Posts: 262
posted
0
If the "${...}" constructs can be nested more than one level deep, you'll have to write your own parser. It's the classic "nested delimiters" problem: regexes can't handle them. However, if you know they'll never go more than one level deep, you can fake it with something like this:
This assumes that, in well-formed text, the '$' character will never appear without the "{...}", and vice versa; if that isn't the case, a more complex regex will be needed.
Robert Willems
Ranch Hand
Joined: Apr 14, 2003
Posts: 32
posted
0
Thanks Alan, too bad regexp's cannot be recursive... Oh well we'll just call it an undocumented restriction that those constructs cannot be nested ;-))) Thanks for your reply... Regards, Robert Willems
Max Habibi
town drunk ( and author)
Sheriff
Joined: Jun 27, 2002
Posts: 4118
posted
0
Hi Robert, I took a crack @ this, and couldn't come up with anything purely regex: sorry if that busts any illusions you had about authors . You might want to consider a recursive method call. The method could use regex internally. All best, M
Hi Max, thanks for your reply... my illusions are totally shattered ... but is it possible to 'count' occurences of a string in a regexp? So i can do something like: - The selected string has to start with ${ - It has to end with } Not so difficult until this point ;-), but can you do something like: - It has to contains as much occurences of { as } ? Because that was another of the main problems.. if i counted on the wellformedness of the string it would be either to reluctent on grabbing characters (returning ${bla {$bla}) or to greedy (returning ${bla ${bla} ${bla}}bla ${bla}) Regards, Robert
Michael Dunn
Ranch Hand
Joined: Jun 09, 2003
Posts: 4632
posted
0
If the format is always ${..}, not sometimes {..}, this might work (needs testing)
I agree. Here's the link: http://ej-technologies/jprofiler - if it wasn't for jprofiler, we would need to
run our stuff on 16 servers instead of 3.