用于简单正则表达式的ABAP CX_SY_REGEX_TOO_COMPLEX

2020-08-15 12:48发布

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

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


大家好,

我玩了一下正则表达式,并做了一个相对简单的正则表达式:

`('[^'] *'| [^ \。'] +)+ \。
 

我在网站上制作的,它在这里正常工作,但是当我在 ABAP,我得到了上面提到的简短转储。

这是我的代码:

 DATA(REGEX)=`('[^'] *'| [^ \。'] +)+ \.。
 DATA(IN)=`这是我的'第一个。 句子"。 这是另一个"句子"。 这是另一个。
 在字符模式结果数据(表)中查找正则表达式正则表达式的所有事件。
 

先谢谢您的问候!

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

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


大家好,

我玩了一下正则表达式,并做了一个相对简单的正则表达式:

`('[^'] *'| [^ \。'] +)+ \。
 

我在网站上制作的,它在这里正常工作,但是当我在 ABAP,我得到了上面提到的简短转储。

这是我的代码:

 DATA(REGEX)=`('[^'] *'| [^ \。'] +)+ \.。
 DATA(IN)=`这是我的'第一个。 句子"。 这是另一个"句子"。 这是另一个。
 在字符模式结果数据(表)中查找正则表达式正则表达式的所有事件。
 

先谢谢您的问候!

付费偷看设置
发送
6条回答
浮生未央
1楼 · 2020-08-15 13:23.采纳回答

嗨,凯文

恐怕您的"简单"正则表达式对于ABAP来说有点太复杂了,因为您正试图从正则表达式中获取分组和子分组(=最终的" + \"部分。 文字中的要点)。 我猜您正在尝试通过查找"。"来识别所有句子。 但忽略了那些放在单括号之间的内容?

我还没有完全弄清楚,但是这个正则表达式可以找到所有出现的"。"。 忽略单个qoutes之间的内容。您可以从那里去,因为该表将为您提供字符串中的位置,而不会返回结果本身。

\。(?=((?:[^'] *'){2})* [^'] * $)

礼物

南山jay
2楼-- · 2020-08-15 13:22

关于正则表达式的性能(为什么引擎估计它太复杂了),我认为您可以联系Stack Overflow的一些专家(您应该解释一下要实现的目标)

关于您想要获得的结果,此正则表达式不够吗?

 DATA(regex)=''[^'] *'| \。| [  ^ \。'] +`。
 DATA(in)=`这是我的'第一个。 句子"。 这是另一个"句子"。 这是另一个。
 尝试。
     在字符模式结果数据(表)中查找REGEX正则表达式的所有事件。
   捕获cx_root INTO DATA(lx)。
  

clasier
3楼-- · 2020-08-15 13:47

#Edit:将此答案作为对原始问题的注释,现在我意识到它是作为答案发送的。

< p>您好,

每种编程语言都具有略有不同的正则表达式语法来表达每件事,该站点没有ABAP风格,您可能是为另一种语言而设计的。

在ABAP本身内部有一个可以测试的地方:report DEMO_REGEX_TOY

我猜您正在尝试在字符串中查找文字(在引号之间),这是一种正则表达式模式:

  ''([^'] *)'`

最诚挚的问候

野沐沐
4楼-- · 2020-08-15 13:36

Sandra Rossi 谢谢您的答复!

使用您的正则表达式,"字符串"和句点将放入新行,但我希望它们位于同一行。

Yor的答案对我来说已经足够了,但是非常感谢您!

何必丶何苦呢
5楼-- · 2020-08-15 13:22

我仍然不太确定为什么ABAP无法应付我的正则表达式,但是您的工作正常 很好。

您可以扩展正则表达式,以便我也忽略| pipe |内的句点吗? 字符?

感谢和问候,

Kevin

哎,真难
6楼-- · 2020-08-15 13:20

嗨,凯文,

实际上,我忽略了您的正则表达式误解了您的真正需求。 而且我以某种方式从未看到那行说ABAP regex遵循POSIX语法(我认为我从来没有打开过Regex帮助起始页)。 没问题,即使您仍然遗漏了一部分问题,我们也不介意提供帮助,但是当您全部提供这些问题时,您将获得更快,更好的答案。

一周热门 更多>