使用负前瞻正则表达式检测缺失的 ID 字段

Detect missing ID field using negetive look-ahead regex

我有一个文件内容为:-

$form->AddFields({
    id => 2048
    type => 'hidden',
    name => 'xyz',
    value => 0,
});

$form->AddFields({
    type => 'hidden',
    name => 'xyz',
    value => 0,
});

$form->AddFields({
    type => 'hidden',
    name => 'xyz',
    id => 1024,
    value => 0,
});
$form->AddFields({
    type => 'hidden',
    name => 'abc',
    value => 10,
});

现在,我需要找到那些没有 ID 字段的 AddFields 函数 (id=>)。 我已经使用 awk 命令完成了它:-

awk '/form->AddFields/{ printf /id =>/? FS: [=11=] RS}' RS='});'

但我需要使用正则表达式做同样的事情。我知道我们需要使用消极的前瞻功能。但是我不知道该怎么做。

预期输出:-

$form->AddFields({
    type => 'hidden',
    name => 'xyz',
    value => 0,
});
$form->AddFields({
    type => 'hidden',
    name => 'abc',
    value => 10,
});

正则表达式可以比 awk 稍长

/$form->AddFields\({(?![^}]+id =>)[^}]+}\);/

Regex Demo

这似乎有效:

$form->AddFields([^)](?!\sid =>))+\);

demo