我有很多文件,格式如下:
SIMPLE
{
residualControl
{
p 1e-4;
U 1e-4;
"(k|omega|epsilon)" 1e-4;
}
nNonOrthogonalCorrectors 0;
pRefCell 0;
pRefValue 0;
}
potentialFlow
{
nNonOrthogonalCorrectors 10;
}
relaxationFactors
{
fields
{
p 0.3;
}
equations
{
U 0.7;
"(k|omega|epsilon).*" 0.7;
}
}
我要匹配文件夹$FOAM_TUTORIALS/incompressible
中所有文件中的以下文本块:
residualControl
{
// line 1
// line 2
// ...etc
}
当我如下使用pcregrep
时:
pcregrep --color -r -M "residualControl.*\n.*\{(.*\n)*" $FOAM_TUTORIALS/incompressible/
它也与其他行匹配(请参见下面的注释):
SIMPLE
{
residualControl
{
p 1e-4;
U 1e-4;
"(k|omega|epsilon)" 1e-4;
} // <<<<<<<<<<<<<<<<<<<<<<<<<<< I want it to stop match here. But it matches also the lines below
nNonOrthogonalCorrectors 0;
pRefCell 0;
pRefValue 0;
}
potentialFlow
{
nNonOrthogonalCorrectors 10;
}
relaxationFactors
{
fields
{
p 0.3;
}
equations
{
U 0.7;
"(k|omega|epsilon).*" 0.7;
}
}
能否请您告诉我如何修改正则表达式以仅匹配第一个块?
答案 0 :(得分:2)
您可以使用此正则表达式进行搜索:
pcregrep --color -r -M '^\h*residualControl\s*{[^}]*}' $FOAM_TUTORIALS/incompressible/
residualControl
{
p 1e-4;
U 1e-4;
"(k|omega|epsilon)" 1e-4;
}
RegEx详细信息:
^\h*
:在一行开始处匹配0个或多个水平空白residualControl\s*
:匹配字符串residualControl
,后跟0个或多个空格(包括换行符){
:比赛开始{
[^}]*
:匹配0个或多个非}
的字符(包括换行符)}
:比赛闭幕}