我有一个包含此文件的文件:
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")
}
时,除了用于部署的关闭括号外,我将获得所有内容。
我怎样才能让正则表达式在第一次遇到紧密支架时停止?
答案 0 :(得分:2)
使用非贪婪的搜索
dependencies.*?[^}]}
答案 1 :(得分:0)
简单易懂的方法是匹配非紧密的大括号:
(?<=dependencies \{)[^}]*
这样做的好处是不需要 dot all 标志(这使得点匹配换行符)。
您也不必担心,理解或使用贪婪/不情愿的量词。
使用后面的外观意味着整个匹配(不是捕获的组)是您的目标。
答案 2 :(得分:0)
您可以使用带有[^}]
量词的否定字符类*
来获得结束括号,并使用}
将其作为文字符号进行匹配(它不需要逸出):
dependencies[^}]*}
请参阅regex demo
这里不需要任何限制只会妨碍正则表达式的表现。