需求就是我用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标签相关推荐

  1. js 取闭合标签正则_js正则表达式解析html标签中的内容

    接口获取的要解析的josn数据: { "item": { "nick": "科沃斯旗舰店", "price": &quo ...

  2. 【6】爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel

    爬虫介绍/准备工作/构建流程/获取数据/BeautifulSoup/Re(正则表达式)/正则提取/标签解析/保存数据到excel 更新时间:2021.9.16 vedio:15,16,17,18,19 ...

  3. python爬虫正则表达式实例-python爬虫 正则表达式解析

    这篇文章主要介绍了python爬虫 正则表达式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 - re.I # 忽略大小写 - re.M # 多 ...

  4. java解析lrc_java中用正则表达式解析LRC文件

    跟着Mars老师 一起写android中的Mp3播放器 真是受益匪浅 再次感谢老师的无私奉献 不过其中问题也确实不少 感觉老师的代码重构做的不够 其中对LRC文件的解析也弄的比较马虎 今天特意花了一天 ...

  5. 【学习笔记】37、用正则表达式解析和提取数据

    用正则表达式解析和提取数据 正则表达式是一种非常好用的信息提取手段,它可以高效的从文本中提取所需信息. 1.findall()函数 基本语法格式: re.findall(匹配规则,原始文本) 例子:提 ...

  6. 使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题

    文章标题:使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题 上下文:参考这篇文章:不使用任何框架,手写纯 JavaScript 实现上传本地文件到 A ...

  7. 如何使用 ABAP 手动解析 multipart/form-data 格式的数据

    文章标题:如何使用 ABAP 手动解析 multipart/form-data 格式的数据 上下文:参考这篇文章:不使用任何框架,手写纯 JavaScript 实现上传本地文件到 ABAP 服务器. ...

  8. 给你的ABAP对象打上标签(Tag)

    标签(Tag)几乎是信息管理软件的一个必备功能,目的是帮助用户更迅速地检索出自己需要的数据,以及对海量数据进行更有效的管理. 如今在ABAP Development Tool里也支持标签功能了,可以像 ...

  9. 【死磕 Spring】----- IOC 之解析 bean 标签:解析自定义标签

    前面四篇文章都是分析 Bean 默认标签的解析过程,包括基本属性.六个子元素(meta.lookup-method.replaced-method.constructor-arg.property.q ...

最新文章

  1. Java 反射 (快速了解反射)
  2. 短信升级为5G消息?三大运营商联合发布的《5G消息白皮书》说了啥?
  3. Win32 窗口篇(1)
  4. eclipse创建springboot项目_Spring Initializer+IntelliJ IDEA创建Spring Boot项目(图文)
  5. 大型分布式存储方案MinIO介绍,看完你就懂了!
  6. Mysql 启动失败没日志,MySQL Server 5.7将无法启动,并且未填充错误日志
  7. 【BZOJ1058】[ZJOI2007]报表统计 STL
  8. 记一次new Map()
  9. Notepad++使用SQL格式化插件
  10. QTP 9.2 下载破解
  11. Hadoop上传和下载大存储的HIVE表
  12. 春招面经总结(获携程Offer)
  13. 泥瓦匠聊并发编程基础篇:线程中断和终止
  14. Hexo+Buttterly+Github Pages构建个人博客
  15. 常用的adodb使用方法
  16. AI智能电话机器人错误码大全解析
  17. didi VirtualApk 框架的使用
  18. “阿里日”102 对新人举办集体婚礼,张勇证婚:“又热,又爱”!
  19. VTK:刀具用法实战
  20. 车载技术—CarFramework框架【AOSP 源码编译】

热门文章

  1. JVM Attach机制实现
  2. 文献记录(part46)--Building Outlier Detection Ensembles by Selective Parameterization of ...
  3. 分布式与人工智能课程(part2)--第二课
  4. 20应用统计考研复试要点(part25)--简答题
  5. 纪念下数据路上遇到的贵人
  6. SAP UI5 初学者教程之十五 - 对话框和 Fragments 的使用方式试读版
  7. SAP BTP SDK for Android 已经支持 Kotlin 了
  8. SAP Spartacus Org Unit List响应回车案件的实现原理
  9. 命令行里对SAP Spartacus执行命令ng test core
  10. SAP Spartacus单元测试用例中Component构造函数的调用上下文