gpt4 book ai didi

regex - pcregrep:如何只匹配第一次出现?

转载 作者:行者123 更新时间:2023-12-04 18:24:19 31 4
gpt4 key购买 nike

我有很多格式如下的文件:

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 中所有文件中的以下文本 block :

    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;
}
}

您能告诉我如何修改正则表达式以仅匹配第一个 block 吗?

最佳答案

您可以使用此正则表达式进行搜索:

pcregrep --color -r -M '^\h*residualControl\s*{[^}]*}' $FOAM_TUTORIALS/incompressible/

residualControl
{
p 1e-4;
U 1e-4;
"(k|omega|epsilon)" 1e-4;
}

正则表达式详细信息:

  • ^\h*:在行首匹配0个或多个水平空格
  • residualControl\s*:匹配字符串residualControl后跟0个或多个空格(包括换行符)
  • {:匹配开头{
  • [^}]*:匹配0个或多个不是
  • 的字符(包括换行符)
  • :匹配结束

关于regex - pcregrep:如何只匹配第一次出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810476/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com