需求就是我用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. 微信8.0内测更新!!!(附内测体验资格)
  2. zigbee 空中消息溯源
  3. PHP上传图片到数据库,并进行显示
  4. 后端学习 - SpringBoot
  5. 曹如进:使用Faker.NET仿造数据
  6. 上网爱快?EasyRadius FOR 爱快V2接口测试版正式推出,欢迎广大爱迷们测试噢
  7. 【资源挖掘】免费DEM数据下载
  8. Exchange2010 server的部署及配置(一)
  9. Deepin 20.1 安装nvidia显卡驱动 爬坑
  10. aplay 源码分析
  11. 学生信息管理系统心得
  12. spark-streaming 编程(六)mapwithState
  13. 小米手机 加载桌面 失败 黑屏
  14. available: expected at least 1 bean which qualifies as autowire candidate
  15. exit()和return的含义及区别
  16. 华为手表开发:WATCH 3 Pro(15)传感器订阅加速度计
  17. js jquery给input标签赋值、取值
  18. gta5因为计算机丢失,GTA5丢失MSVCR100.dll怎么办 修复方法介绍
  19. 用python获取图形对象的坐标集合
  20. 函数概念 返回值 参数

热门文章

  1. maven 配置(安装)以及遇到的The JAVA_HOME environment variable is not defined correctly.
  2. J2EE中的各种工程的介绍
  3. 文献学习(part29)
  4. 文本字符串中提取数据进行分析
  5. 一款数据人专属的红包封面,速度领,手慢无
  6. SAP Spartacus 成功读取 Cart 之后,如何将 payload 插入全局 state
  7. 如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数
  8. TypeScript reflect-metadata 结合方法装饰器实现的一个自定义语法检查的例子
  9. Angular 依赖注入 UseClass 和 UseExisting 的区别
  10. 使用Fiddler监控使用RestTemplate发送网络请求的Java应用