我有几个这样的文本块文件:
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_enforce 的 maxlength: 块,但不知何故,我无法让它在多行和没有真实的限制的情况下工作。
我已经尝试了这样的模式(maxlength:(\s*.*))(?!enforce)
这里是一个例子,整个文件与多个占用这样的块https://regexr.com/7mjh1确保打开整个文件的例子,以了解问题。
它要么匹配到很多行,要么匹配不够,即使“enforce”存在,它也是一个匹配。我想我没有正确地理解这个概念,并且在文件中指定这样一个块的边界时遇到了问题,我猜它一定很简单,但没有得到它。
2条答案
按热度按时间lawou6xi1#
您可以使用
字符串
然后,您需要替换为
型
参见regex demo。
(?m)
-Pattern.MULTILINE
内联选项^
-一行的开始(\h*)
-组1:零个或多个水平空白maxlength:
- a文本(?:\R\1(?!\h*maxlength_js_enforce:)(\h+).*)*
-零个或多个序列\R
-任意换行符序列\1
-与第1组中的值相同(缩进空白序列)(?!\h*maxlength_js_enforce:)
-后面不跟零个或多个水平空格,然后是maxlength_js_enforce:
文本(\h+)
-组1:一个或多个水平空白.*
-线路的其余部分$
-线的末端.(?!\R\1\h)
-后面不紧跟着换行符,与第1组中捕获的值相同,然后是单个水平空格。$0\n$1$2maxlength_js_enforce: true
替换模式用自身($0
)替换匹配的文本,然后添加一个换行符(\n
)、第1组值($1
)、第2组值($2
),然后添加maxlength_js_enforce: true
文本。dl5txlt92#
我在模式中添加了multiline标志,以便使用^作为行首。这将在每个组中匹配,直到并包括可选的现有键:
字符串
您可以使用此替换来添加/替换您想要的设置:
型
这也将取代
maxlength_js_enforce: false
(尽管在演示中没有这样的例子)