サーチ…
置換
REPLACE文は、正規表現を直接使用できます。
DATA(lv_test) = 'The quick brown fox'.
REPLACE ALL OCCURRENCES OF REGEX '\wo' IN lv_test WITH 'XX'.
変数lv_testと評価されますThe quick bXXwn XXx 。
検索
FINDステートメントは、正規表現を直接使用することができます。
DATA(lv_test) = 'The quick brown fox'.
FIND REGEX '..ck' IN lv_test.
" sy-subrc == 0
FIND REGEX 'a[sdf]g' IN lv_test.
" sy-subrc == 4
オブジェクト指向の正規表現
より高度な正規表現操作の場合は、 CL_ABAP_REGEXとその関連クラスを使用することをおCL_ABAP_REGEXします。
DATA: lv_test TYPE string,
lo_regex TYPE REF TO cl_abap_regex.
lv_test = 'The quick brown fox'.
CREATE OBJECT lo_regex
EXPORTING
pattern = 'q(...)\w'.
DATA(lo_matcher) = lo_regex->create_matcher( text = lv_test ).
WRITE: / lo_matcher->find_next( ). " X
WRITE: / lo_matcher->get_submatch( 1 ). " uic
WRITE: / lo_matcher->get_offset( ). " 4
述語関数による正規表現の評価
述語関数のmatchesは、オブジェクト宣言を使用せずにその場で文字列を評価するために使用できます。
IF matches( val = 'Not a hex string'
regex = '[0-9a-f]*' ).
cl_demo_output=>display( 'This will not display' ).
ELSEIF matches( val = '6c6f7665'
regex = '[0-9a-f]*' ).
cl_demo_output=>display( 'This will display' ).
ENDIF.
OO正規表現を使用したサブマッチの取得
クラスCL_ABAP_MATCHERメソッドGET_SUBMATCHを使用することによって、グループ/サブグループ内のデータを取得できます。
目標:キーワード 'Type'の右側にトークンを取得します。
DATA: lv_pattern TYPE string VALUE 'type\s+(\w+)',
lv_test TYPE string VALUE 'data lwa type mara'.
CREATE OBJECT ref_regex
EXPORTING
pattern = lv_pattern
ignore_case = c_true.
ref_regex->create_matcher(
EXPORTING
text = lv_test
RECEIVING
matcher = ref_matcher
).
ref_matcher->get_submatch(
EXPORTING
index = 0
RECEIVING
submatch = lv_smatch.
結果の変数lv_smatchには値MARAが含まれています。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow