溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何使用ABAP正則表達(dá)式解析HTML標(biāo)簽

發(fā)布時(shí)間:2021-12-29 16:35:49 來(lái)源:億速云 閱讀:236 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下如何使用ABAP正則表達(dá)式解析HTML標(biāo)簽,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

需求就是我用ABAP的某個(gè)函數(shù)從數(shù)據(jù)庫(kù)讀取一個(gè)字符串出來(lái),該字符串的內(nèi)容是一個(gè)網(wǎng)頁(yè)。

網(wǎng)頁(yè)的form里包含了很多隱藏的input field。我的任務(wù)是解析出name為svyValueGuid的input field的值:FA163EEF573D1ED89E89C7FE5E7C4715

如何使用ABAP正則表達(dá)式解析HTML標(biāo)簽

最簡(jiǎn)單粗暴的做法是:利用ABAP的FIND FIRST OCCURRENCE關(guān)鍵字首先找到svyValueGuid的偏移量,然后從這個(gè)偏移量出發(fā),再找到第一個(gè)>的偏移量,這樣問(wèn)題就化簡(jiǎn)為在子串type="hidden" value="FA163EEF573D1ED89E89C7FE5E7C4715",這樣問(wèn)題就簡(jiǎn)單多了。但是這種辦法比較笨重,代碼很冗余。

有沒(méi)有更快捷的辦法呢?那就是使用ABAP regular expression,即正則表達(dá)式。

請(qǐng)看下列的測(cè)試代碼:

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.

執(zhí)行結(jié)果:

如何使用ABAP正則表達(dá)式解析HTML標(biāo)簽

解決問(wèn)題的核心思路是這個(gè)正則表達(dá)式:.svyValueGuid(?:.)value="(.)">.SurveyId.***

通過(guò)捕獲分組操作符,一對(duì)小括號(hào),將32位的GUID值進(jìn)行捕獲。這種解法比FIND FIRST OCCURANCE的代碼量要少。

看完了這篇文章,相信你對(duì)“如何使用ABAP正則表達(dá)式解析HTML標(biāo)簽”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI