使用Java-Regex将文本与Regex成对分割成几行

时间:2013-09-16 12:19:33

标签: java regex split

我有以下文字:

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

我想成对分割文本,其中分隔符是#{mycolors.getColors()},并且将保存先前的分隔符和当前分隔符之间的文本。例如。对于这样的对:

对1:        text: my-widget {       颜色:       数字: 1

对2:       文字}     ...     我-tridget {       颜色:     的数:           2

到目前为止我使用的是什么,

 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);          
 }

但数字和文字将是:

文字颜色:数字: 1

文字颜色:数字: 2

所以文本没有多行。我怎样才能做到这一点? (与Pattern.MULTILINE相加的Pattern.DOTALL对我没有帮助)

1 个答案:

答案 0 :(得分:1)

您正在犯的一些错误:

  1. 要跨多行匹配文字,您需要使用Pattern.DOTALL代替Pattern.MULTILINE
  2. 而不是.*使其不贪婪.*?
  3. 您的文字包含字符串getColors,但您的正则表达式中有getColor
  4. 以下正则表达式模式应该适合您:

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