【问题标题】:proper escaping of regex in ABAP在 ABAP 中正确转义正则表达式
【发布时间】:2018-01-12 09:23:11
【问题描述】:

我试图逃避下面的正则表达式

(<t:Message>)[\s\S]*?(<\/t:Message>)

在我的 ABAP 源代码中使用它。

到目前为止,我得到的只有以下内容:

(<t:Message>)[\\s\\S]\*?(<\/t:Message>)

但由于任何原因,它并没有给出想要的结果。

这里是否有任何正则表达式专家可以帮助我摆脱这个正则表达式以便我可以在 ABAP 中使用它?我将不胜感激。

【问题讨论】:

  • 试试(?s)&lt;t:Message&gt;(.*?)&lt;/t:Message&gt;
  • @WiktorStribiżew 这在 ABAP 环境中没有帮助,因为那里仍然不支持 *?...
  • @vwegert 我提到了help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/… 它说支持ICU正则表达式风格。
  • @WiktorStribiżew 不确定您所说的“ICU”是什么意思 - 不幸的是,使用 *? 会引发异常......
  • 您是否尝试使用 RegEx 从 XML 模式中解析信息?使用CL_XML_DOCUMENT 不是更好吗,如果我没记错的话是ABAP 的DOM 实现。

标签: regex abap


【解决方案1】:

你的表达有两个主要问题,根本与逃避无关。

还可以指定特殊字符\w、\u、\l、\d和\s 在集合内 [...]。使用特殊字符 \W、\U、\L、\D 和 不允许在集合内使用 \S 并引发异常 CX_SY_INVALID_REGEX。

(引自documentation) - 所以用其他东西替换它,比如.*

正则表达式 r{n,m}?, r*?和 r+?为将来保留 语言增强(非贪婪行为),目前提高 CX_SY_INVALID_REGEX 异常。

(引自documentation) - 所以不要使用*?

(&lt;t:Message&gt;).*(&lt;/t:Message&gt;) 至少在语法上是正确的——它是否能达到你想要的效果还不清楚,因为你一开始没有指定你需要什么。

【讨论】:

  • 我之前没有看过这个文档,所以我不知道正则表达式的这些部分不受支持。根据您的回答,您提供的正则表达式可以正常工作,因为我只想提取 xml 字符串中的消息标签。非常感谢。
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 2011-08-29
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多