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

2021-08-21 14:27:43 字數 1977 閱讀 7631

需求就是我用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(<

match

>) index 1.

read table <

match

>-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 以下...