温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-12-29 16:35:49 来源:亿速云 阅读:247 作者:小新 栏目:大数据

小编给大家分享一下如何使用ABAP正则表达式解析HTML标签,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

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

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

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

最简单粗暴的做法是:利用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.

执行结果:

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

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

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

看完了这篇文章,相信你对“如何使用ABAP正则表达式解析HTML标签”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI