Regex 使用正则表达式基于肯定条件选择行,但基于否定条件排除某些行

Regex 使用正则表达式基于肯定条件选择行,但基于否定条件排除某些行,regex,perl,ultraedit,Regex,Perl,Ultraedit,如果在某个地方有答案,我很抱歉,但是如果有,我的搜索技能已经失败了 我正在使用UltraEdit,我需要从一些JSON模式中删除一些行,以便于比较 鉴于以下情况: "PaymentMethod": { "$id": "/properties/PaymentMethod", "items": { "$ref": "PaymentMethod.json" },

如果在某个地方有答案,我很抱歉,但是如果有,我的搜索技能已经失败了

我正在使用UltraEdit,我需要从一些JSON模式中删除一些行,以便于比较

鉴于以下情况:

"PaymentMethod": {
               "$id": "/properties/PaymentMethod",
                "items": {
                    "$ref": "PaymentMethod.json"
                },
                "type": "array"
            }
使用此正则表达式:

^.*\".*\"\: \".*$\r\n
选择以下行:

"$id": "/properties/PaymentMethod",
"$ref": "PaymentMethod.json"
"type": "array"
我需要做的是跳过$ref行

我曾尝试通过各种方式使用(?!json)和选择标准来实现负面环顾,但都失败了

其目的是删除选定的行

谢谢你的帮助

更新: 为了澄清,我想删除一些与我的正则表达式找到的条件相匹配的行,但我不想删除$ref行。 所以我希望找到一种相对简单的方法,在UltraEdit中使用直接的perl正则表达式来实现这一点


我已经用Python脚本创建了一个变通方法,这样我就可以完成我的工作,但如果有办法做到这一点,那还是很有意思的。:)

如果您不想在初始引号后添加
$ref

^.*\"(?!\$ref).*\"\: \".*$\r\n 
请看这里:

或者根据行末尾的
.json“
排除:

^.*\".*\"\: \".*(?<!\.json")$\r\n

^.*\.*\:\”*(?,您可能应该使用
[^\n”]*
,这将阻止使用换行符或
”。您的正则表达式与
”类型匹配:“数组”
,例如。

使用JSON模块直接操作数据将是一个更健壮的解决方案,但编辑JSON文件的一种笨拙的方法是在命令行上运行它

同样,这不是处理JSON的好方法,但它可能适合您的特殊情况

perl -ne 'print unless /"\$ref:"/' file.json > new_file.json

不要编写自己损坏的解析器;使用现有的解析器

use Cpanel::JSON::XS qw( decode_json );

my $json_utf8      = '...';
my $data           = decode_json($json_utf8);
my $payment_method = $data->{PaymentMethod};
my $id             = $payment_method->{'$id'};
my $item           = $payment_method->{items}{'$ref'};
my $type           = $payment_method->{type};

我想他可能是想标记PCRE而不是perl本身,尽管我可能弄错了。我在UltraEdit中使用perl设置。您是使用
$id
$ref
作为不同字符串的占位符,还是它们实际上是
$id
$ref
?这是一个JSON模式的片段,$id是URI定义on while$ref指定在模式中的该点使用不同的JSON文件。我不是说值,而是键。它实际上是3个字符
$
I
d
和4个字符
$
r
e
f
,还是用于匿名化实际数据$ref和$id的字符串d JSON模式关键字。我认为这意味着使用了
$id
$ref
,这简化了答案。我包括行的结尾,因为我实际上是通过将它们替换为null来删除这些行。@user1459463-但您希望显式地这样做,而不是在正则表达式中的任何地方。请参阅:UltraEdit可能没有SingleL默认情况下,行是打开的(
匹配换行符),但是您可以禁用此设置并使用
[^”]
查看“
非”
”是否包含换行符。然后尝试
*?
[^”\n]*
[^”\n]*?
查看行为的变化。