`
JerryWang_SAP
  • 浏览: 1032309 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

使用ABAP正则表达式解析HTML标签

阅读更多

需求就是我用ABAP的某个函数从数据库读取一个字符串出来,该字符串的内容是一个网页。

网页的form里包含了很多隐藏的input field。我的任务是解析出name为svyValueGuid的input field的值:FA163EEF573D1ED89E89C7FE5E7C4715

 

最简单粗暴的做法是:利用ABAP的FIND FIRST OCCURRENCE关键字首先找到svyValueGuid的偏移量,然后从这个偏移量出发,再找到第一个>的偏移量,这样问题就化简为在子串type="hidden" value="FA163EEF573D1ED89E89C7FE5E7C4715",这样问题就简单多了。但是这种办法比较笨重,代码很冗余。

有没有更快捷的办法呢?那就是使用ABAP regular expression,即正则表达式。

请看下列的测试代码:

REPORT ztest_interface.

DATA: lv_input TYPE string,

reg_pattern TYPE string.

lv_input = `<body>` &&

`<div class="Title">Jerry's Programming Skill survey</div>` &&

`<form action="Survey.htm?sap-client=001">` &&

`<input name="svyApplicationId" type="hidden" value="CRM_SURVEY_ACTIVITY">` &&

`<input name="svyValueGuid" type="hidden" value="FA163EEF573D1ED89E89C7FE5E7C4715">` &&

`<input name="SurveyId" type="hidden" value="JERRY_TEST">` &&

`<div Id="" class="Section1">` && `</form></body>`.

reg_pattern = '.*svyValueGuid(?:.*)value="(.*)">.*SurveyId.*'.

TRY.

DATA(lo_regex) = NEW cl_abap_regex( pattern = reg_pattern ).

DATA(lo_matcher) = lo_regex->create_matcher( EXPORTING text = lv_input ).

IF lo_matcher->match( ) <> abap_true.

WRITE:/ 'fail in input scan!'.

RETURN.

ENDIF.

DATA(lt_reg_match_result) = lo_matcher->find_all( ).

READ TABLE lt_reg_match_result ASSIGNING FIELD-SYMBOL(<match>) INDEX 1.

READ TABLE <match>-submatches ASSIGNING FIELD-SYMBOL(<sub>) INDEX 1.

data(lv_sub) = lv_input+<sub>-offset(<sub>-length).

WRITE:/ 'result: ', lv_sub.

CATCH cx_root INTO DATA(cx_root).

WRITE:/ cx_root->get_text( ).

RETURN.

ENDTRY.

执行结果:

 

解决问题的核心思路是这个正则表达式:.svyValueGuid(?:.)value="(.)">.SurveyId.***

通过捕获分组操作符,一对小括号,将32位的GUID值进行捕获。这种解法比FIND FIRST OCCURANCE的代码量要少。

 

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

 
 
0
0
分享到:
评论

相关推荐

    SAP ABAP 正则表达式 Regular expressions

    需要注意的是,ABAP的正则表达式语义可能与其他语言(如Perl、Java)有所不同,因此使用专门针对ABAP的工具进行测试显得尤为重要。 这就是Regex Toy的作用所在。这个小型的交互式工具专为ABAP开发者设计,旨在快速...

    ABAP正则表达式的使用

    ### ABAP正则表达式的使用 #### 一、引言 ABAP(Advanced Business Application Programming)作为SAP系统的核心编程语言之一,在企业级应用开发中占据着重要地位。随着SAP系统的不断发展,ABAP也在不断地引入新的...

    ABAP正则表达式

    在ABAP中,正则表达式主要通过内置的`REGEX`函数来使用。基本的元字符包括`.`(匹配任何单个字符,除了换行符)、`*`(匹配前一个字符零次或多次)、`+`(匹配前一个字符一次或多次)、`?`(匹配前一个字符零次或一...

    JS常用正则表达式及其使用方法

    以下是一些常用的正则表达式及其使用方法。 1. **非负整数(正整数+0)** 正则表达式 `^\d+$` 用于匹配非负整数,包括0和正整数。`^` 表示匹配字符串的开始,`\d` 是数字的元字符,代表0-9之间的任何数字,`+` ...

    CSV文件上传下载分隔符问题以及ABAP正则式

    本主题将探讨CSV文件在上传下载过程中可能遇到的分隔符问题以及如何使用ABAP(Advanced Business Application Programming)中的正则表达式来解决这些问题。 首先,CSV文件的基本原理是用特定的字符(默认为逗号)...

    sap-abap培训讲义资源分享

    - 在ABAP中,我们可以使用正则表达式来检查输入数据的有效性。例如,要验证信用卡号是否仅包含数字、连字符和空格,可以编写一个名为`check`的方法,接受一个类型为`c`的参数`cardno`,并返回一个类型为`abap_bool`...

    ABAP中正则表达式的简单使用

    在ABAP中,可以使用`[^x00-xff]*`这样的正则表达式来匹配所有字符,其中`[^x00-xff]`表示除了ASCII控制字符之外的所有字符,而`*`则表示可以匹配任意数量的这些字符。例如: ```abap DATA(str) = 'abcҰadfsf'. ...

    price-parser:从原始文本字符串中提取价格金额和货币符号

    例如,您可以编写一个以价格为目标CSS / XPath选择器,然后使用该库进行清理,而不用编写特定于站点的自定义正则表达式或Python代码。 许可证是BSD 3条款。安装pip install price-parser价格分析器需要Python 3.6及...

    SAP解析xml abap解析xml

    这部分代码展示了如何使用ABAP的字符串拼接功能来创建一个包含认证信息、连接信息以及组织和语言设置的XML文档。 ```abap CONCATENATE '&lt;Request&gt;' '&lt;Access&gt;' '...

    ABAP json 相同解析类

    在本篇文章中,我们将深入探讨如何在ABAP中使用相同的解析类来处理JSON数据。 首先,我们要知道ABAP提供的主要JSON处理类是`CL_SXML_CONV`和`CL_ABAP_JSON_UTILITIES`。这两个类提供了读取、写入和验证JSON数据的...

    ABAP解析XML

    3. **Web服务交互**:许多Web服务使用XML作为数据交换格式,因此ABAP可以利用XML解析能力与这些Web服务进行交互。 #### 六、总结 通过对上述代码的分析,我们可以看出ABAP在处理XML方面具有强大的功能。利用`if_i...

    ZDE_HTML.rar_abap_abap html_abap html

    "abap__html"和"abap_html"这两个标签则直接指出了ABAP与HTML的结合,意味着这些文件可能包含ABAP编写的功能,用于生成或处理HTML文档。 压缩包内的文件: 1. "ZDE_HTML.txt":这可能是一个文本文件,其中包含了...

    ABAP_DOCU_HTML. 学习大全,以网页的形式文档

    ABAP DOCU HTML是SAP ABAP编程语言的官方文档集合,它以HTML格式呈现,为开发者提供了全面的学习资源。这个文档集包含了ABAP的所有核心概念、语法、函数模块、类库、表单以及报告编写等多方面的内容,旨在帮助用户...

    ABAP从FTP下载文件并解析到内表移动文件位置.zip

    在ABAP(Advanced Business Application Programming)环境中,处理文件操作,如从FTP服务器下载文件、解析ZIP文件、将数据存储到内表以及管理文件系统中的文件移动,是常见的任务。本篇将详细介绍如何实现这些功能...

    控制输入文本框的格式

    例如,可以使用正则表达式先进行初步筛选,然后用`split`、`map`等方法进一步处理日期部分,确保日期的正确性。如果输入的日期格式不正确,应提示用户纠正。 最后,"jQuery ajax"标签暗示可能需要与服务器进行异步...

    ABAP 查询屏幕标签页搜索条件

    根据提供的ABAP代码示例,我们可以深入探讨其中涉及的关键知识点,包括如何在ABAP程序中创建查询屏幕、使用标签页以及处理用户输入等。 ### ABAP查询屏幕标签页搜索条件 #### 报告ZTEST_TAN9 此报告旨在演示如何...

    ABAP_DOCU_HTML

    在ABAP开发环境中,开发者可以使用ABAP DOCU命令来创建或编辑这些HTML文档。这些文档包含了代码的用途、参数说明、返回值、示例用法等关键信息,有助于其他开发人员快速理解代码的功能和操作方式。当ABAP DOCU HTML...

    ABAP加密和解密.doc

    在ABAP中,我们可以使用内置的加密函数来完成这一过程。例如,`cl_abap_encrypt`类提供了多种加密方法,如AES(高级加密标准)、RSA等。这些方法支持对字符串、二进制数据甚至整个表进行加密。 解密则是加密的逆...

Global site tag (gtag.js) - Google Analytics