使用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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
使用ABAP正则表达式解析HTML标签相关推荐
- js 取闭合标签正则_js正则表达式解析html标签中的内容
接口获取的要解析的josn数据: { "item": { "nick": "科沃斯旗舰店", "price": &quo ...
- 【6】爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel
爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel 更新时间:2021.9.16 vedio:15,16,17,18,19 ...
- python爬虫正则表达式实例-python爬虫 正则表达式解析
这篇文章主要介绍了python爬虫 正则表达式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 - re.I # 忽略大小写 - re.M # 多 ...
- java解析lrc_java中用正则表达式解析LRC文件
跟着Mars老师 一起写android中的Mp3播放器 真是受益匪浅 再次感谢老师的无私奉献 不过其中问题也确实不少 感觉老师的代码重构做的不够 其中对LRC文件的解析也弄的比较马虎 今天特意花了一天 ...
- 【学习笔记】37、用正则表达式解析和提取数据
用正则表达式解析和提取数据 正则表达式是一种非常好用的信息提取手段,它可以高效的从文本中提取所需信息. 1.findall()函数 基本语法格式: re.findall(匹配规则,原始文本) 例子:提 ...
- 使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题
文章标题:使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题 上下文:参考这篇文章:不使用任何框架,手写纯 JavaScript 实现上传本地文件到 A ...
- 如何使用 ABAP 手动解析 multipart/form-data 格式的数据
文章标题:如何使用 ABAP 手动解析 multipart/form-data 格式的数据 上下文:参考这篇文章:不使用任何框架,手写纯 JavaScript 实现上传本地文件到 ABAP 服务器. ...
- 给你的ABAP对象打上标签(Tag)
标签(Tag)几乎是信息管理软件的一个必备功能,目的是帮助用户更迅速地检索出自己需要的数据,以及对海量数据进行更有效的管理. 如今在ABAP Development Tool里也支持标签功能了,可以像 ...
- 【死磕 Spring】----- IOC 之解析 bean 标签:解析自定义标签
前面四篇文章都是分析 Bean 默认标签的解析过程,包括基本属性.六个子元素(meta.lookup-method.replaced-method.constructor-arg.property.q ...
最新文章
- Java 反射 (快速了解反射)
- 短信升级为5G消息?三大运营商联合发布的《5G消息白皮书》说了啥?
- Win32 窗口篇(1)
- eclipse创建springboot项目_Spring Initializer+IntelliJ IDEA创建Spring Boot项目(图文)
- 大型分布式存储方案MinIO介绍,看完你就懂了!
- Mysql 启动失败没日志,MySQL Server 5.7将无法启动,并且未填充错误日志
- 【BZOJ1058】[ZJOI2007]报表统计 STL
- 记一次new Map()
- Notepad++使用SQL格式化插件
- QTP 9.2 下载破解
- Hadoop上传和下载大存储的HIVE表
- 春招面经总结(获携程Offer)
- 泥瓦匠聊并发编程基础篇:线程中断和终止
- Hexo+Buttterly+Github Pages构建个人博客
- 常用的adodb使用方法
- AI智能电话机器人错误码大全解析
- didi VirtualApk 框架的使用
- “阿里日”102 对新人举办集体婚礼,张勇证婚:“又热,又爱”!
- VTK:刀具用法实战
- 车载技术—CarFramework框架【AOSP 源码编译】
热门文章
- JVM Attach机制实现
- 文献记录(part46)--Building Outlier Detection Ensembles by Selective Parameterization of ...
- 分布式与人工智能课程(part2)--第二课
- 20应用统计考研复试要点(part25)--简答题
- 纪念下数据路上遇到的贵人
- SAP UI5 初学者教程之十五 - 对话框和 Fragments 的使用方式试读版
- SAP BTP SDK for Android 已经支持 Kotlin 了
- SAP Spartacus Org Unit List响应回车案件的实现原理
- 命令行里对SAP Spartacus执行命令ng test core
- SAP Spartacus单元测试用例中Component构造函数的调用上下文