I am trying to write a regex which would match a (not necessarily repeating) sequence of text blocks, e.g.:
foo,bar,foo,bar
My initial thought was to use backreferences, something like
(foo|bar)(,\1)*
But it turns out that this regex only matches foo,foo or bar,bar but not foo,bar or bar,foo (and so on).
Is there any other way to refer to a part of a pattern?
In the real world, foo and bar are 50+ character long regexes and I simply want to avoid copy pasting them to define a sequence.
With a decent regex flavor you could use
(foo|bar)(?:,(?-1))*or the like.But Java does not support subpattern calls.
So you end up having a choice of doing String replace/format like in ajx’s answer, or you could condition the comma if you know when it should be present and when not. For example: