考虑动态文本的 ABAP 正则表达式
ABAP regex which considers dynamic texts
我有一个字符串,其中某处包含:
{"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)。
重要提示:名称 属性 的值是动态的。所以我需要一些正则表达式,它适用于名称 属性 的不同值。
此外,我不能指望 ID_A 对象总是第一个。也许顺序可以改变。
由于我不是正则表达式专家,如果有人能提供帮助,我会很高兴。
我从未使用过 ABAP,但可以帮助您实现所需目标的通用正则表达式如下所示:
((?<="id":"ID_A").*?"visible":)false([,}].*)
然后您需要在使用正则表达式中的捕获组时进行替换。
您可以在此处找到示例:https://www.regextester.com/?fam=115947
只需打开 "Substitution" 部分并输入 true
我不推荐使用正则表达式进行 JSON 解析,因为正则表达式在许多情况下可能不起作用。
在 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 'true'.
如果元素值包含 }
,或者某处有额外的 space 等,上述正则表达式将不起作用。
正则表达式的解释:
(...)
表示注册子组(可以用$
后跟子组号代替,如上面代码中的</code>)</li>
<li><code>[^...]
任何不在建议字符列表中的字符,例如[^}].
表示任何不是 }
的字符
*
: kleene star 允许前一个字符或组重复 0 次或任意次数
我有一个字符串,其中某处包含:
{"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)。
重要提示:名称 属性 的值是动态的。所以我需要一些正则表达式,它适用于名称 属性 的不同值。
此外,我不能指望 ID_A 对象总是第一个。也许顺序可以改变。
由于我不是正则表达式专家,如果有人能提供帮助,我会很高兴。
我从未使用过 ABAP,但可以帮助您实现所需目标的通用正则表达式如下所示:
((?<="id":"ID_A").*?"visible":)false([,}].*)
然后您需要在使用正则表达式中的捕获组时进行替换。
您可以在此处找到示例:https://www.regextester.com/?fam=115947
只需打开 "Substitution" 部分并输入 true
我不推荐使用正则表达式进行 JSON 解析,因为正则表达式在许多情况下可能不起作用。
在 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 'true'.
如果元素值包含 }
,或者某处有额外的 space 等,上述正则表达式将不起作用。
正则表达式的解释:
(...)
表示注册子组(可以用$
后跟子组号代替,如上面代码中的</code>)</li> <li><code>[^...]
任何不在建议字符列表中的字符,例如[^}].
表示任何不是}
的字符
*
: kleene star 允许前一个字符或组重复 0 次或任意次数