需求就是我用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 以下...