Tony
Tony

Reputation: 2406

Split text with Java-Regex in pairs with Regex over several lines

I have following text:

my-widget{
  color: #{mycolors.getColors(1)}
}
...
my-tridget{
  color: #{mycolors.getColors(2)}
  ...
}
...

I want to split the text in pairs, where the delimiter is #{mycolors.getColors()} and the text between previous delimeter and current delimiter will be saved. E.g. for such pairs:

Pair 1: text: my-widget{ color: number: 1

Pair 2: text: } ... my-tridget{ color: number: 2

What I am used so far,

 Pattern p = Pattern.compile("(.*)#\\{mycolors.getColor\\(([0-9])\\)\\}", Pattern.CASE_INSENSITIVE|Pattern.MULTILINE);
    Matcher m = p.matcher(data);

 while (m.find){
     String number = m.group(2).toLowerCase().trim();
     String text = m.group(1);          
 }

But number and text will be to:

text: color: number: 1

text: color: number: 2

So the text doesn't go over several lines. How can I achieve this ? (The Pattern.DOTALL in addtion to Pattern.MULTILINE didn't help me)

Upvotes: 1

Views: 165

Answers (1)

anubhava
anubhava

Reputation: 785316

Some mistakes you're making:

  1. To match text across multiple lines you need to use Pattern.DOTALL instead of Pattern.MULTILINE
  2. Instead of .* make it non greedy .*?
  3. Your text has string getColors but you have getColor in your regex

Following regex pattern should work out for you:

Pattern p = Pattern.compile("(.*?)#\\{mycolors.getColors\\((\\d+)\\)\\}", 
                            Pattern.CASE_INSENSITIVE|Pattern.DOTALL);

Upvotes: 1

Related Questions