加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[ABAP]正则表达式取字符串中数字笔记

(2013-01-15 17:46:44)
标签:

abap

it

分类: ABAP

 

取数字正则表达式:  '(\s\d+.\d*)'

测试结果:字符串数字有要求,1. 数字前一定要有空格,2.整数后一定要有空格,带小数位的数字后面可以无空格,如下50后要空格,34.6后面可无空格;否则读取不出。

http://s2/mw690/69f04819gddd5671d8d21&690

*********************************
REPORT ZTEST2.

PARAMETERSp_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.
dataresult_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).
    writelv_num1.
  when 2.
    lv_num2 lv_str_tmp+wa_result-offset(wa_result-length).
    writelv_num2.
  when 3.
    lv_num3 lv_str_tmp+wa_result-offset(wa_result-length).
    writelv_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

    

************************************************************************
                                       *
************************************************************************
DATAlv_data(30TYPE c VALUE '测试哈哈哈11522天,嘎嘎嘎嘎'.
DATAlv_len TYPE p.
DATAlv_str(30TYPE c.
DATAlv_count TYPE p.
DATAlv_index TYPE p.


START-OF-SELECTION.
  lv_len  STRLENlv_data ).
  DO lv_len TIMES.
    lv_index  lv_count.
    lv_count  lv_count 1.
    IF lv_data+lv_index(1CO '0123456789'.
      CONCATENATE  lv_str lv_data+lv_index(1INTO lv_str.
    ENDIF.
  ENDDO.

  WRITE:/ lv_str.

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有