正则表达式无法在java中找到重复的标记

时间:2012-09-19 10:45:29

标签: java regex

嗨,我知道这个问题已被多次询问过。我使用的方法与SO的某人建议使用正则表达式查找重复表达式相同,但它无法正常工作。我有一个类似于下面的模式文件,我需要使用正则表达式在Java中进行解析。

[Abc]
var1 = "val1"
var2 = val2 
[Def]
var1 = "\[val1\]" 
var2 = 1;
var3 = val3
[Xyz]
var1 = val1 

我正在使用正则表达式(\[([^\\]*?)\])(.|\s)*?来查找文件中的块。我正在考虑从方括号开始到下一个括号开始的块。当我在regex planet尝试这个正则表达式时,它不起作用。它匹配给定的文件,但它发现group(3)为null,它应该是从第一个方括号的末尾到下一个方括号的开头的块。 我也试过使用这个正则表达式(\[([^\\]+?)\]\s*$\s*(([^=]*)\s*=\s*([^$]*)\s*$)*?),但这也行不通。 当我将值对数固定为4并尝试使用正则表达式(\[(.+?)\]\s*?(.+?)\s*?=\s*?(.+?)\s*?(.+?)\s*?=\s*?(.+?)\s*?(.+?)\s*?=\s*?(.+?)\s*?(.+?)\s*?=\s*?(.+?)\n\s*?)时,它工作正常。为什么它不适用于变量大小。

如果我能够在上面的情况下提取块,我想要两个块的例子

var1 = "val1"
var2 = val2

或直接提取

var1 , "val1" var2 val2

希望这会使问题清楚。

1 个答案:

答案 0 :(得分:1)

你需要积极向前看。 你需要找到下一个块开始,但没有捕获它。

一些事情

(\[([^\\]*?)\])((.*\s)*?)(?=(\[[^\\]*\])|$)

说明:

  • (\[([^\\]*?)\]) - 块定义:[sdgsdg]
  • ((.*\s)*?) - 块内容。线条,但不贪心。
  • (?=(\[[^\\]*\])|$) - 积极向前看。另一个块的开头,或字符串的结尾。