使用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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

相关文章
|
26天前
|
机器学习/深度学习 前端开发 Windows
【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 )
【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 )
31 0
|
1月前
|
JavaScript 前端开发 开发者
正则表达式深度解析:斜杠的妙用
【2月更文挑战第29天】
195 0
正则表达式深度解析:斜杠的妙用
|
1月前
|
JavaScript 前端开发 数据可视化
html解析过程
html解析过程【2月更文挑战第26天】
22 6
|
1月前
|
XML 前端开发 数据格式
请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
【2月更文挑战第22天】【2月更文挑战第67篇】请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
|
1月前
|
JSON 数据格式
第三方系统或者工具通过 HTTP 请求发送给 ABAP 系统的数据,应该如何解析试读版
第三方系统或者工具通过 HTTP 请求发送给 ABAP 系统的数据,应该如何解析试读版
27 0
正则表达式:深度解析与实用指南
正则表达式:深度解析与实用指南
|
3月前
|
JavaScript 前端开发 API
【JavaScript】<正则表达式Regular Expression>JavaScript正则表达式解析
【1月更文挑战第17天】【JavaScript】<正则表达式Regular Expression>JavaScript正则表达式解析
|
18天前
|
前端开发 JavaScript
HTML深度解析:更改文本颜色
【4月更文挑战第1天】
40 0
HTML深度解析:更改文本颜色
|
2月前
|
XML Java 数据格式
Spring5源码(41)-tx:annotation-driven 标签解析过程
Spring5源码(41)-tx:annotation-driven 标签解析过程
206 0
|
3月前
|
数据采集 监控 Go
掌握Go语言正则表达式:regexp包全面解析
掌握Go语言正则表达式:regexp包全面解析
70 0

推荐镜像

更多