File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
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)
subject: Anyone know regular expressions?
Similar Threads
Reg ex help desired; should be simple, but...
Help! Problems with a method calling itself...
parsing textfile using java
Anyone know regular expressions?
Subjective Questions?