请与正则表达式帮助

2020-09-28 06:38发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我对Regex非常陌生,实际上我对ABAP完全陌生:)

我试图弄清楚为什么使用这段代码与使用Regex Toy时的结果会有所不同。

我要尝试的是替换最后一个"。"之后的数字。

我的正则表达式为[^。] * $,表示文本" DV-102.1.1"替换为2

正则表达式玩具会给我正确答案。...DV-102.1.2

使用该ABAP代码片段,但是它没有...它给了我DV-2

报告znw_regex_play。

         DATA lv_count TYPE i值1。
         数据(lv_new_wbs_no)= lv_count + 1。
         DATA(lv_val)='DV-102.1.1'。
        
 SPLIT lv_val AT匹配(val = lv_val
                        regex ='[^。] * $')放入DATA(lv_wbs_part1)DATA(lv_wbs_part2)。
     
 lv_val = lv_wbs_part1 && lv_new_wbs_no。

         写:lv_val。

 

谁能告诉我我哪里出问题了?

谢谢。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我对Regex非常陌生,实际上我对ABAP完全陌生:)

我试图弄清楚为什么使用这段代码与使用Regex Toy时的结果会有所不同。

我要尝试的是替换最后一个"。"之后的数字。

我的正则表达式为[^。] * $,表示文本" DV-102.1.1"替换为2

正则表达式玩具会给我正确答案。...DV-102.1.2

使用该ABAP代码片段,但是它没有...它给了我DV-2

报告znw_regex_play。

         DATA lv_count TYPE i值1。
         数据(lv_new_wbs_no)= lv_count + 1。
         DATA(lv_val)='DV-102.1.1'。
        
 SPLIT lv_val AT匹配(val = lv_val
                        regex ='[^。] * $')放入DATA(lv_wbs_part1)DATA(lv_wbs_part2)。
     
 lv_val = lv_wbs_part1 && lv_new_wbs_no。

         写:lv_val。

 

谁能告诉我我哪里出问题了?

谢谢。

付费偷看设置
发送
8条回答
95年老男孩
1楼 · 2020-09-28 06:57.采纳回答

DEMO_REGEX_TOY(查找正则表达式)并进行匹配,其工作原理相同。 将正则表达式[^。] * $应用于'DV-102.1.1',它们都返回" 1"。

您的问题仅在于SPLIT,因为SPLIT'DV-102.1.1'AT'1'INTO part1 part2给出了两个分段'DV-'和'02 .1.1'。

有很多方法可以做你想要的。 我会选择

使用lv_new_wbs_no在lv_val中替换正则表达式'[^。] * $'。

 lv_val = replace(val = lv_val regex ='[^。] * $'with = lv_new_wbs_no)。
95年老男孩
2楼-- · 2020-09-28 07:04
木偶小白
3楼-- · 2020-09-28 07:08

两个问题:

"。" 表示匹配一个字符。 因此找到一个真正的"。" 您必须使用反斜杠将其转义:

 [^ \。] * $ 

第二,我认为您的代码不会取代最后一个。 看起来它将使用正则表达式找到最后一个" 1",然后在替换部分匹配第一个" 1"。

正则表达式的替代选择是在最后一个"。"之前和之后进行两次匹配。 并将第二个匹配项增加1:

 mystr = 1.1.1.1.1。
 mystr = | {match(val = mystr regex =`。* \。`} | &&&
         | {conv i(match(val = mystr regex =`[^ \。] + $`)+ 1} |。
 "结果:1.1.1.1.2 
Climb_Ma
4楼-- · 2020-09-28 07:00

" 那没有道理。"

ABAP中的许多内容都没有道理:-)

我不记得原因,但是自从我第一次使用ABAP regex以来,这就是我的理解方式。

有时候事情没有意义,最简单的方法是耸耸肩膀,接受现状,继续前进。 bool vs xsdbool浮现在脑海...

吹牛啤
5楼-- · 2020-09-28 06:57

哇,这引发了很多讨论,这太好了!

我调试了正则表达式玩具在做什么,并选择了REPLACE解决方案而不是SPLIT。

最后,我的代码与Sandra所建议的完全相同。

感谢大家的投入。 非常感谢。

骆驼绵羊
6楼-- · 2020-09-28 06:57

总是逃避特殊字符是一个好习惯,但是对于值集(在[...]内部),仅以下字符\ [](据我所知) 被认为是特殊字符,需要转义。

追夢秋陽
7楼-- · 2020-09-28 06:55

REGEX用于验证电话格式,邮政编码格式的特定格式。 但不能替换值。

根据您的要求,将SPLIT放入表中的"。",因此最后一个点之后的数据将进入表的最后一条记录。 再将其增加1,即可将由点分隔的表中的同一组记录连接起来。

一周热门 更多>