0

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

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

我正在使用正则表达式(\[([^\\]*?)\])(.|\s)*?在文件中查找块。我正在考虑从方括号开始到下一个括号开始的块。当我在正则表达式星球上尝试这个正则表达式时,它不起作用。它匹配给定的文件,但它发现 group(3) 为空,它应该是从第一个方括号末尾到下一个方括号开头的块。我也尝试过使用这个正则表达式(\[([^\\]+?)\]\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

希望这能说明问题。

4

1 回答 1

1

您需要使用积极的前瞻性。您需要找到下一个块开始,但不要抓住它。

伴随着一些东西

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

解释:

  • (\[([^\\]*?)\])- 块定义:[sdgsdg]
  • ((.*\s)*?)- 块内容。行,但不贪心。
  • (?=(\[[^\\]*\])|$)- 积极展望未来。另一个块的开始,或字符串的结尾。
于 2012-09-19T11:18:02.630 回答