正则表达式:多行文本的负向前瞻

问题描述 投票:0回答:1

我有几个带有这样的文本块的文件:

  maxlength:
    maxlength_js: 500
    maxlength_js_label: 'Inhalt auf @limit Zeichen begrenzt, verbleibend: <strong>@remaining</strong>'
    maxlength_js_enforce: true
    maxlength_js_truncate_html: false

有时 maxlength_js_enforce: true 存在,有时不存在。 我想通过查找和替换将 maxlength_js_enforce: true 添加到所有此类 maxlenght: 块中。

我试图找到所有没有 maxlength_js_enforcemaxlength: 块,并使用带有负向前瞻的正则表达式模式,但不知怎的,我无法让它与多行一起工作,并且对这样一个块的结尾没有真正的限制。

我已经尝试过类似的图案了

(maxlength:(\s*.*))(?!enforce)
这是一个包含多次出现此类块的整个文件的示例https://regexr.com/7mjh1 确保打开整个文件示例以了解问题。

要么匹配多行,要么匹配不够,即使存在“enforce”,它也是匹配的。 我认为我没有正确理解这个概念,并且在文件中指定此类块的边界时遇到问题,猜测它一定非常简单,但不明白。

regex regex-lookarounds regex-negation
1个回答
0
投票

我将全局标志添加到模式中,以便使用 ^ 作为行首。这将在每个组中匹配,直到并包括可选的现有密钥:

^((\x20*)maxlength:.*([\r\n]+\2\x20{2}(?!\x20)(?!maxlength_js_enforce:).*)+)([\r\n]+\2\x20{2}maxlength_js_enforce:.*)?

您可以用此替换来添加/替换您想要的设置:

$1\n$2  maxlength_js_enforce: true
© www.soinside.com 2019 - 2024. All rights reserved.