https://c.runoob.com/front-end/854/ 菜鸟上的在线正则测试网站,这上面通过了就能用在sap正则里面
REPORT ZDEMO_REGEX.
DATA: gv_str TYPE string ,
gv_result TYPE string ,
gt_result TYPE match_result_tab ,
gs_result LIKE LINE OF gt_result.
" 过滤双字节字符,如汉字、空格、标点
CLEAR gv_result.
gv_str = 'Hello 世界,今天天气 good.。'.
FIND ALL OCCURRENCES OF REGEX '[^x00-xff]*' IN gv_str RESULTS gt_result.
LOOP AT gt_result INTO gs_result.
gv_result = gv_result && gv_str+gs_result-offset(gs_result-length). " 通过偏移访问原字符串值
ENDLOOP.
WRITE: / gv_result.
" 获取连续的A-Za-z英文字符[A-Za-z]+
" 获取单个A-Za-z英文字符[A-Za-z]
CLEAR gv_result.
gv_str = 'Hello 世界,今天天气 good.。'.
FIND ALL OCCURRENCES OF REGEX '[A-Za-z]+' IN gv_str RESULTS gt_result.
LOOP AT gt_result INTO gs_result.
gv_result = gv_result && gv_str+gs_result-offset(gs_result-length). " 通过偏移访问原字符串值
ENDLOOP.
WRITE: / gv_result.
" 获取连续的0-9数字字符[0-9]+
" 获取单个0-9数字字符[0-9]
CLEAR gv_result.
gv_str = '今天想吃1个馒头,两个包子,3个馍馍'.
FIND ALL OCCURRENCES OF REGEX '[0-9]+' IN gv_str RESULTS gt_result.
LOOP AT gt_result INTO gs_result.
gv_result = gv_result && gv_str+gs_result-offset(gs_result-length). " 通过偏移访问原字符串值
ENDLOOP.
WRITE / gv_result.
"正则压缩json字符串空格
DATA lv_str TYPE string.
lv_str = '{ ' &&
' "REQ_DATA": { ' &&
' "IT_INPUT": [{ ' &&
' "BANKS": "", ' &&
' "BANKL": "", ' &&
' "BANKA": " *银行" ' &&
' } ' &&
' ], ' &&
' "IV_GUID": "1234" ' &&
' } ' &&
'} '.
REPLACE ALL OCCURRENCES OF REGEX '\s(?=([^"]*"[^"]*")*[^"]*$)' IN lv_str WITH ''. " 正则压缩json字符串空格
" 文件名提取
FIND ALL OCCURRENCES OF REGEX '[^/\\]+[/\\]*$' IN ls_file_table-filename RESULTS lt_result.
IF sy-subrc = 0.
READ TABLE lt_result INTO ls_result INDEX 1.
ls_zdemo_file-file_name = ls_file_table-filename+ls_result-offset(ls_result-length). " 通过偏移取文件名(带后缀)
ls_zdemo_file-file_extension = ls_zdemo_file-file_name.
REPLACE ALL OCCURRENCES OF REGEX '\.\w*' IN ls_zdemo_file-file_name WITH ''. " 正则删除后缀,取文件名
REPLACE ALL OCCURRENCES OF REGEX '.+\.' IN ls_zdemo_file-file_extension WITH ''. " 正则删除文件名,取后缀
ENDIF.
新发现,abap里面字符串类型和char类型,正则的处理结果不一致,发现是char类型不足位则末尾有空格
DATA: lv_char TYPE char10.
DATA: lv_string TYPE string.
lv_char = '1234'.
REPLACE ALL OCCURRENCES OF REGEX '[ ]+$' IN lv_char WITH '!'. " 正则会把末尾的六个空格换成!
WRITE / lv_char. " 1234!
lv_char = '1234--'.
REPLACE ALL OCCURRENCES OF REGEX '[-]+$' IN lv_char WITH '!'. " 正则匹配不到末尾的短横线,因为末尾全是空格
WRITE / lv_char. " 1234--
lv_char = '1234------'.
REPLACE ALL OCCURRENCES OF REGEX '[-]+$' IN lv_char WITH ''. " 正则匹配末尾全部短横线
WRITE / lv_char. " 1234
" 字符串类型末尾没有空格影响
lv_string = '1234--'.
REPLACE ALL OCCURRENCES OF REGEX '[-]+$' IN lv_char WITH ''. " 正则匹配末尾全部短横线
WRITE / lv_char. " 1234
" 类似去除末尾字符的还有这个方法,对char和string都生效
lv_char = shift_right( val = lv_char sub = |-| ).
lv_string = shift_right( val = lv_string sub = |-| ).