使用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 ...
最新文章
- 微信8.0内测更新!!!(附内测体验资格)
- zigbee 空中消息溯源
- PHP上传图片到数据库,并进行显示
- 后端学习 - SpringBoot
- 曹如进:使用Faker.NET仿造数据
- 上网爱快?EasyRadius FOR 爱快V2接口测试版正式推出,欢迎广大爱迷们测试噢
- 【资源挖掘】免费DEM数据下载
- Exchange2010 server的部署及配置(一)
- Deepin 20.1 安装nvidia显卡驱动 爬坑
- aplay 源码分析
- 学生信息管理系统心得
- spark-streaming 编程(六)mapwithState
- 小米手机 加载桌面 失败 黑屏
- available: expected at least 1 bean which qualifies as autowire candidate
- exit()和return的含义及区别
- 华为手表开发:WATCH 3 Pro(15)传感器订阅加速度计
- js jquery给input标签赋值、取值
- gta5因为计算机丢失,GTA5丢失MSVCR100.dll怎么办 修复方法介绍
- 用python获取图形对象的坐标集合
- 函数概念 返回值 参数
热门文章
- maven 配置(安装)以及遇到的The JAVA_HOME environment variable is not defined correctly.
- J2EE中的各种工程的介绍
- 文献学习(part29)
- 文本字符串中提取数据进行分析
- 一款数据人专属的红包封面,速度领,手慢无
- SAP Spartacus 成功读取 Cart 之后,如何将 payload 插入全局 state
- 如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数
- TypeScript reflect-metadata 结合方法装饰器实现的一个自定义语法检查的例子
- Angular 依赖注入 UseClass 和 UseExisting 的区别
- 使用Fiddler监控使用RestTemplate发送网络请求的Java应用