首页 > 解决方案 > 使用大括号和关键字之间的正则表达式获取内容

问题描述

我只是面临一个问题,我无法解决它。我试图建立我的正则表达式模式,它必须在大括号之间获取内容,但如果只有一个确切的关​​键字位于左大括号之前。

(?<=(?:\testlist\b)|(?:){)((.*?)(?=}))

整个内容本身可能包含许多块(总是以关键字开头),例如:

nodelist{
...
...
}
testlist
{
...
...
}

使用上述模式,我可以获得每个节点内容,但我想在正则表达式中指定只有“testlist”节点的内容必须被抓取。(大括号的位置因设计而异,因为即使大括号与关键字在同一行,或者无论大括号后面包含多少个换行符,我也想获取内容)

有谁知道,我怎样才能做到这一点?

谢谢!

标签: regexpowershellpowershell-4.0

解决方案


您可以使用正则表达式

(?s)testlist\s*{(.*?)}

这从字面上匹配testlist,后跟空格和字面左大括号。(.*?)捕获所有内容,直到下一个右大括号。

用法:

PS C:\Users\greg> 'nodelist{
>> ...
>> ...
>> }
>> testlist
>> {
>> ...
>> ...
>> }' -match '(?s)testlist\s*{(.*?)}'
True
PS C:\Users\greg> $Matches.0
testlist
{
...
...
}
PS C:\Users\greg> $Matches.1

...
...

PS C:\Users\greg>   

如果您想要完全匹配而不是捕获组:

PS C:\Users\greg> 'nodelist{
>> ...
>> ...
>> }
>> testlist
>> {
>> ...
>> ...
>> }' -match '(?s)(?<=testlist\s*{).*?(?=})'
True
PS C:\Users\greg> $Matches.0

...
...

PS C:\Users\greg>   

推荐阅读