我有以下文字:
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对我没有帮助)
答案 0 :(得分:1)
您正在犯的一些错误:
Pattern.DOTALL
代替Pattern.MULTILINE
.*
使其不贪婪.*?
getColors
,但您的正则表达式中有getColor
以下正则表达式模式应该适合您:
Pattern p = Pattern.compile("(.*?)#\\{mycolors.getColors\\((\\d+)\\)\\}",
Pattern.CASE_INSENSITIVE|Pattern.DOTALL);