Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java正则表达式在多行上成对拆分文本_Java_Regex_Split - Fatal编程技术网

使用Java正则表达式在多行上成对拆分文本

使用Java正则表达式在多行上成对拆分文本,java,regex,split,Java,Regex,Split,我有以下案文: my-widget{ color: #{mycolors.getColors(1)} } ... my-tridget{ color: #{mycolors.getColors(2)} ... } ... 我想将文本分成两部分,其中分隔符为#{mycolors.getColors()},将保存上一个delimeter和当前分隔符之间的文本。例如,对于此类配对: 第1对: 文本:我的小部件{ 颜色: 编号:1 第2对: 文本:} ... 我的三叉戟{ 颜色: 编号:

我有以下案文:

my-widget{
  color: #{mycolors.getColors(1)}
}
...
my-tridget{
  color: #{mycolors.getColors(2)}
  ...
}
...
我想将文本分成两部分,其中分隔符为#{mycolors.getColors()},将保存上一个delimeter和当前分隔符之间的文本。例如,对于此类配对:

第1对: 文本:我的小部件{ 颜色: 编号:1

第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.DOTALL添加到Pattern.MULTILINE中对我没有帮助)

您正在犯的一些错误:

Pattern p = Pattern.compile("(.*?)#\\{mycolors.getColors\\((\\d+)\\)\\}", 
                            Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
  • 要跨多行匹配文本,需要使用
    Pattern.DOTALL
    而不是
    Pattern.MULTILINE
  • 而不是
    *
    让它成为非贪婪的
    *?
  • 文本中有字符串
    getColors
    ,但正则表达式中有
    getColor
  • 下面的正则表达式模式应该适合您:

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

    您正在犯的一些错误:

    Pattern p = Pattern.compile("(.*?)#\\{mycolors.getColors\\((\\d+)\\)\\}", 
                                Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
    
  • 要跨多行匹配文本,需要使用
    Pattern.DOTALL
    而不是
    Pattern.MULTILINE
  • 而不是
    *
    让它成为非贪婪的
    *?
  • 文本中有字符串
    getColors
    ,但正则表达式中有
    getColor
  • 下面的正则表达式模式应该适合您:

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

    @Simon抱歉,但我不知道如何使用您的建议。@Simon抱歉,但我不知道如何使用您的建议。谢谢您的回答!我尝试更改正则表达式,它似乎符合我的要求。谢谢您的回答!我尝试更改正则表达式,它似乎符合我的要求。