Sunday 7 August 2016

ABAP Regular Expressions Usage

Requirement: 

Filter strings of pattern LNN_NNNN_NN_LL (L – Letter, N – Number) from a list Eg: Z00_0002_01_AA, Z01_0015_02_AA etc.

Solution:

Used SAP regular expressions (REGEX) concept to get this done in a program. It makes string, integer and special character comparisons much simpler.
'\<Z\d\d_\d\d\d\d_\d\d_\D\D\>' is the matching pattern in terms of regular expressions for a string likeZ00_0002_01_AA’.

DATA: c_pattern TYPE string VALUE '\<Z\d\d_\d\d\d\d_\d\d_\D\D\>'.
DATA:lv_match   TYPE abap_bool,
     lr_matcher 
TYPE REF TO cl_abap_matcher.
lr_matcher cl_abap_matcher=>create
pattern     c_pattern
      ignore_case 
'X'
      
text        = ‘Z00_0002_01_AA’ ).
lv_match lr_matcher->match( ).

If lv_match = ‘X’ then it is a match.

Special characters used
Meaning
\d
Placeholder for any single digit
\D
Placeholder for any character other than a digit
\<
Start of a word
\>
End of a word


There is a standard program available to check REGEX Functionality DEMO_REGEX_TOY. Below are few screens from the same.




Finding the pattern: