当存在多个括号时,使用正则表达式提取特定括号内的信息

时间:2015-10-13 22:20:02

标签: java regex

我有一个包含此文件的文件:

Gem::Specification.new do |s|    
   s.files = Dir['{app,config,db,lib}/**/*', 'MIT-LICENSE', 'Rakefile',   'README.rdoc']
end

我希望提取依赖项括号内的信息。

当我尝试使用dependencies { compile group: "org.osgi", name: "org.osgi.compendium", version: "5.0.0" compile group: "org.osgi", name: "org.osgi.core", version: "6.0.0" } deploy { deployDir = file("${Home}/osgi/modules") } 时,除了用于部署的关闭括号外,我将获得所有内容。

我怎样才能让正则表达式在第一次遇到紧密支架时停止?

3 个答案:

答案 0 :(得分:2)

使用非贪婪的搜索

dependencies.*?[^}]}

答案 1 :(得分:0)

简单易懂的方法是匹配非紧密的大括号:

(?<=dependencies \{)[^}]* 

这样做的好处是不需要 dot all 标志(这使得点匹配换行符)。

您也不必担心,理解或使用贪婪/不情愿的量词。

使用后面的外观意味着整个匹配(不是捕获的组)是您的目标。

答案 2 :(得分:0)

您可以使用带有[^}]量词的否定字符类*来获得结束括号,并使用}将其作为文字符号进行匹配(它不需要逸出):

dependencies[^}]*}

请参阅regex demo

这里不需要任何限制只会妨碍正则表达式的表现。