我有一个字符串,其中某处包含:
{"id":"ID_A","name":"Test","visible":false},{"id":"ID_B","name":"Hallo","visible":false},...
我想替换ID_A的可见值,使其变为:
{"id":"ID_A","name":"Test","visible":true},{"id":"ID_B","name":"Hallo","visible":false},...
ID始终相同。我不想更改所有其他对象(例如ID_B(的可见参数。
重要提示:name属性的值是动态的。所以我需要一些regex,它适用于name属性的不同值。
此外,我不能指望ID_A对象总是第一个。也许顺序可以改变。
由于我不是正则表达式专家,如果有人能帮忙,我会很高兴。
我从未使用过ABAP,但可以帮助您实现所需目标的通用正则表达式如下所示:
((?<="id":"ID_A").*?"visible":)false([,}].*)
然后,您需要在使用regexp中的捕获组时进行替换。
你可以在这里找到一个例子:https://www.regextester.com/?fam=115947
只需打开"替换"部分并输入$1true$2
我不建议使用正则表达式进行JSON解析,因为RegEx在许多情况下可能不起作用。
在ABAP中,类似的东西可能在大多数情况下都有效:
DATA: text TYPE string, pattern TYPE string.
pattern = '("id":"ID_A"[^}]*"visible":)false'.
text = '{"id":"ID_A","name":"Test","visible":false},'
&& '{"id":"ID_B","name":"Hallo","visible":false},...'.
REPLACE ALL OCCURRENCES OF REGEX pattern
IN text WITH '$1true'.
如果元素值包含}
,或者某个地方有额外的空间,则上述正则表达式将不起作用。
正则表达式的解释:
(...)
表示子组的注册(可通过指示$
后跟子组的编号来替换,例如上面代码中的$1
([^...]
不在建议字符列表中的任何字符,例如[^}].
表示不属于}
的任何字符*
:kleene星允许0或任何数量的前一个字符或组的重复