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

标签 java regex

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

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

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

如果我能够在上面的 block 示例中提取 block ,我希望两者都是

var1 = "val1"
var2 = val2

或者直接提取

var1 , "val1" var2 val2

希望这能让问题清楚。

最佳答案

您需要使用积极的前瞻性。 您需要找到下一个 block 的开始,但不能捕获它。

一些事情

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

解释:

  • (\[([^\\]*?)\]) - block 定义:[sdgsdg]
  • ((.*\s)*?) - block 内容。行,但不贪心。
  • (?=(\[[^\\]*\])|$) - 积极的展望。另一个 block 的开始,或字符串的结尾。

关于java - 正则表达式无法在java中找到重复标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12493159/

相关文章:

java - 来自 ok Retrofit 响应的图像的空模型

java - 在 Android 手机上检查方向

java - 如何递归获取图形中可以包含循环的所有连接节点?

javascript - 使用 php 抓取主要内容

regex - 屏蔽除最后四位之外的所有数字

java - 如何删除显示应用程序名称的标题而不是标题栏本身?

java - Android TextView 左右对齐文本

regex - 使用 | 时两种选择是否匹配?在 Perl 正则表达式中?

php - 如何从 URL 获取视频 ID? (每日运动)

javascript - jquery 验证瑞典语字符