取数字正则表达式:
'(\s\d+.\d*)'
测试结果:字符串数字有要求,1.
数字前一定要有空格,2.整数后一定要有空格,带小数位的数字后面可以无空格,如下50后要空格,34.6后面可无空格;否则读取不出。
http://s2/mw690/69f04819gddd5671d8d21&690
*********************************
REPORT
ZTEST2.
PARAMETERS: p_input TYPE string DEFAULT ' 50 %POLYESTER 34.6%COTTON 15.2%RAYON' OBLIGATORY.
DATA: lc_regex TYPE REF TO cl_abap_regex,
lc_matcher TYPE REF TO cl_abap_matcher,
match TYPE c .
DATA: result_tab TYPE match_result_tab ,
wa LIKE LINE OF result_tab.
TRY.
CREATE OBJECT lc_regex
EXPORTING
pattern = '(\s\d+.\d*)'
"填取数字/IP地址/身份证号码等等正则表达式
ignore_case = 'X'.
"可不填此参数
CATCH cx_sy_regex .
ENDTRY.
***方式1
*TRY.
* CALL METHOD lc_regex->create_matcher
* EXPORTING
* text = p_input
* RECEIVING
* matcher = lc_matcher .
* CATCH cx_sy_matcher .
* ENDTRY.
*
*
*TRY.
* CALL METHOD lc_matcher->match "是否完全匹配
* RECEIVING
* success = match.
* CATCH cx_sy_matcher .
* ENDTRY.
***方式2
TRY .
CREATE OBJECT lc_matcher
EXPORTING
regex = lc_regex
text = p_input .
CATCH cx_sy_matcher .
ENDTRY .
***********END
CALL METHOD lc_matcher->find_all
RECEIVING
matches = result_tab.
LOOP AT result_tab INTO wa.
WRITE / p_input+wa-offset(wa-length).
** NEW-LINE .
ENDLOOP.
http://s9/mw690/69f04819gddd5324cbf98&690
REPORT ZTEST2.
data : lv_str type string value 'Log Attributes 0.5443 ( 113545 ) ( 43.56 % Available )'.
data : lv_str_tmp type string.
data : lv_num1 type string,
lv_num2 type string,
lv_num3 type string.
data : lv_len type i.
data: result_tab type match_result_tab.
data : wa_result like line of result_tab.
lv_str_tmp = lv_str.
find all occurrences of regex '(\s\d+.\d*)' in lv_str_tmp results result_tab.
loop at result_tab into wa_result from 1 to 3.
case sy-tabix.
when 1.
lv_num1 = lv_str_tmp+wa_result-offset(wa_result-length).
write: lv_num1.
when 2.
lv_num2 = lv_str_tmp+wa_result-offset(wa_result-length).
write: lv_num2.
when 3.
lv_num3 = lv_str_tmp+wa_result-offset(wa_result-length).
write: lv_num3.
endcase.
endloop.
http://s1/mw690/69f04819gddd393293b80&690
正则表达式帖子: http://blog.csdn.net/pely122/article/details/8804432
注:ECC6下专门测试正则表达式的工具程序se38:DEMO_REGEX_TOY
执行程序:
http://s2/mw690/69f04819gddd4f4ba9161&690
下面方法不可取:
用CO
'0123456789'判断
注:CO: contains only有且只有数字才取出;cs
************************************************************************
* S E L E C T I O N S C R E E N *
************************************************************************
DATA: lv_data(30) TYPE c VALUE '测试哈哈哈11522天,嘎嘎嘎嘎'.
DATA: lv_len TYPE p.
DATA: lv_str(30) TYPE c.
DATA: lv_count TYPE p.
DATA: lv_index TYPE p.
START-OF-SELECTION.
lv_len = STRLEN( lv_data ).
DO lv_len TIMES.
lv_index = lv_count.
lv_count = lv_count + 1.
IF lv_data+lv_index(1) CO '0123456789'.
CONCATENATE lv_str lv_data+lv_index(1) INTO lv_str.
ENDIF.
ENDDO.
WRITE:/ lv_str.
加载中,请稍候......