ABAP正则表达式,它考虑动态文本



我有一个字符串,其中某处包含:

{"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或任何数量的前一个字符或组的重复

相关内容

  • 没有找到相关文章

最新更新