my dog learned polymorphism
The moose likes Java in General and the fly likes Anyone know regular expressions? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "Anyone know regular expressions?" Watch "Anyone know regular expressions?" New topic

Anyone know regular expressions?

Robert Willems
Ranch Hand

Joined: Apr 14, 2003
Posts: 32
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 ${...}
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

Regards,<br />Robert Willems of Brilman<br /> <br />----------------------<br /> <br />SCJP 1.4<br />SCWCD 1.3<br />SCWCD 1.4 (beta)<br />SCDJWS 1.4 (beta)<br />SCBCD 1.3 (studying)
Jessica Sant

Joined: Oct 17, 2001
Posts: 4313

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
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
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...
Robert Willems
Max Habibi
town drunk
( and author)

Joined: Jun 27, 2002
Posts: 4118
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,

Java Regular Expressions
Robert Willems
Ranch Hand

Joined: Apr 14, 2003
Posts: 32
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})
Michael Dunn
Ranch Hand

Joined: Jun 09, 2003
Posts: 4632
If the format is always ${..}, not sometimes {..}, this might work (needs testing)
I agree. Here's the link:
subject: Anyone know regular expressions?
It's not a secret anymore!