使用ABAP正規表示式解析HTML標籤

2021-09-13 08:10:35 字數 1877 閱讀 8806

需求就是我用abap的某個函式從資料庫讀取乙個字串出來,該字串的內容是乙個網頁。

網頁的form裡包含了很多隱藏的input field。我的任務是解析出name為svyvalueguid的input field的值:fa163eef573d1ed89e89c7fe5e7c4715

最簡單粗暴的做法是:利用abap的find first occurrence關鍵字首先找到svyvalueguid的偏移量,然後從這個偏移量出發,再找到第乙個》的偏移量,這樣問題就化簡為在子串type="hidden" value="fa163eef573d1ed89e89c7fe5e7c4715",這樣問題就簡單多了。但是這種辦法比較笨重,**很冗餘。

有沒有更快捷的辦法呢?那就是使用abap regular expression,即正規表示式。

請看下列的測試**:

report ztest_inte***ce.

data: lv_input type string,

reg_pattern type string.

lv_input = `` &&

`jerry's programming skill survey

` &&

``.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() index 1.

read table -submatches assigning field-symbol() index 1.

data(lv_sub) = lv_input+-offset(-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的**量要少。

使用ABAP正規表示式解析HTML標籤

需求就是我用abap的某個函式從資料庫讀取乙個字串出來,該字串的內容是乙個網頁。網頁的form裡包含了很多隱藏的input field。我的任務是解析出name為svyvalueguid的input field的值 fa163eef573d1ed89e89c7fe5e7c4715 最簡單粗暴的做法是...

使用ABAP正規表示式解析HTML標籤

需求就是我用abap的某個函式從資料庫讀取乙個字串出來,該字串的內容是乙個網頁。網頁的form裡包含了很多隱藏的input field。我的任務是解析出name為svyvalueguid的input field的值 fa163eef573d1ed89e89c7fe5e7c4715 最簡單粗暴的做法是...

ABAP 正規表示式 簡介

abap 支援擴充套件正規表示式 ere 可以支援以下關鍵字 find replace也可以作為下列函式 built in function 的變數 count,count contains find,find match matches replace substring,substring 以下...