Difference between revisions of "SAP ABAP REGEX"
From SapWiki
(14 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
===Ejemplo de Uso de regex en ABAP=== | ===Ejemplo de Uso de regex en ABAP=== | ||
− | DATA: lt_match_result TYPE match_result_tab. | + | <nowiki>DATA: lt_match_result TYPE match_result_tab. |
− | + | data: l_regex type string, | |
− | + | l_string type string. | |
− | + | data: l_matches TYPE i. | |
− | + | l_regex = '^[^<>()\[\]\\,;:\s@"`]+@([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}$'. | |
− | + | l_string = 'pablo.tapia@sapwiki.cl'. | |
− | + | FIND ALL OCCURRENCES OF REGEX l_regex IN l_string | |
− | + | IN CHARACTER MODE RESPECTING CASE | |
− | + | MATCH COUNT l_matches RESULTS lt_match_result. | |
− | + | if l_matches le 0. | |
− | + | message i000(0k) with 'E-mail no valido' display like 'E'. | |
− | + | return. | |
− | + | endif.</nowiki> | |
===validar rut (muy simple)=== | ===validar rut (muy simple)=== | ||
− | FIND REGEX '[0-9]{1,8}-([0-9]|K)' IN l_strng. | + | <nowiki>FIND REGEX '[0-9]{1,8}-([0-9]|K)' IN l_strng.</nowiki> |
===valida e-mail=== | ===valida e-mail=== | ||
− | ^[^<>()\[\]\\,;:\s@"`]+@([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}$ | + | <nowiki>^[^<>()\[\]\\,;:\s@"`]+@([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}$</nowiki> |
===validar Números=== | ===validar Números=== | ||
+ | <nowiki>validar número | ||
+ | 1.1111 correcto | ||
+ | -1.1111 correcto | ||
+ | 1.11111- correcto | ||
+ | 1111 correcto | ||
− | + | ^[-?0-9]+([.])?([0-9]+)?-?$ | |
− | |||
− | |||
− | |||
− | |||
− | + | números de 2 enteros y 7 decimales | |
+ | 1.1234567 correcto | ||
+ | 11.1234560 correcto | ||
− | + | ^[0-9]{1,2}\.([0-9]{7})+$ | |
− | |||
− | |||
− | + | con signo izquierda | |
+ | -1.1234567 correcto | ||
+ | 1.1234567 correcto | ||
− | + | ^-?[0-9]{1,2}\.([0-9]{7})+$ | |
− | |||
− | |||
− | + | con signo derecha o izquierda | |
+ | ^-?[0-9]{1,2}\.([0-9]{7})+-?$ | ||
− | + | validar número entero | |
− | + | ^[0-9]+$ | |
− | + | numero NNN.NN | |
− | + | valido | |
+ | 111.1 | ||
+ | 11.11 | ||
+ | 1 | ||
− | + | ^\d{1,3}(\.\d{1,2})?$ | |
− | |||
− | |||
− | |||
− | |||
− | + | numero entero con máximo de 13 caracteres | |
+ | valido | ||
+ | 1234567890111 | ||
+ | 111 | ||
+ | 1 | ||
− | + | ^\d{1,13}$ | |
− | |||
− | |||
− | |||
− | |||
− | + | MODULE verificar_folio INPUT. | |
+ | DATA l_string TYPE string. | ||
+ | DATA l_folio(7) TYPE n. | ||
+ | |||
+ | IF zfi_datoscajas-folio IS NOT INITIAL. | ||
+ | MOVE zfi_datoscajas-folio TO l_string. | ||
+ | CONDENSE l_string. | ||
+ | |||
+ | FIND REGEX '[^\d]' IN l_string IN CHARACTER MODE RESPECTING CASE. | ||
+ | IF sy-subrc = 0. | ||
+ | MESSAGE e000(0k) WITH 'Folio deber contener solo números'. | ||
+ | ELSE. | ||
+ | MOVE l_string TO l_folio. | ||
+ | MOVE l_folio TO zfi_datoscajas-folio. | ||
+ | ENDIF. | ||
+ | ENDIF. | ||
+ | ENDMODULE. | ||
+ | </nowiki> | ||
=== Elimina prefijo === | === Elimina prefijo === | ||
− | * NC00000009 -> 00000009 | + | <nowiki>* NC00000009 -> 00000009 |
− | + | *saca prefijos de XBLNR | |
− | + | data l_xblnr type string. | |
− | + | l_xblnr = vbrk-xblnr. | |
− | + | REPLACE all OCCURRENCES OF REGEX '[[:alpha:]]' IN l_xblnr with ''. | |
− | + | if sy-subrc = 0. | |
− | + | .... | |
− | + | endif.</nowiki> | |
ejemplo 2 | ejemplo 2 | ||
Line 85: | Line 103: | ||
===convertir fecha (yyyymmdd->dd/mm/yyyy)=== | ===convertir fecha (yyyymmdd->dd/mm/yyyy)=== | ||
− | data l_fecha(10). | + | <nowiki>data l_fecha(10). |
− | + | l_fecha = sy-datum. | |
− | + | replace FIRST OCCURRENCE OF REGEX '(\d{4})(\d{2})(\d{2})' | |
− | in l_fecha WITH '$3/$2/$1'. | + | in l_fecha WITH '$3/$2/$1'. |
− | + | write:/ l_fecha.</nowiki> | |
+ | ===Convierte folio=== | ||
+ | <nowiki>* Folio1: PRmmaaRppnnnnnn | ||
+ | * Folio2: 0208020 + aa + mm + nnnnnn | ||
+ | * Ejemplo: PR0720R007188233 se convierte en 02080202007188233 | ||
+ | |||
+ | *----------------------------------------------------------------------* | ||
+ | * --> p1 text | ||
+ | * <-- p2 text | ||
+ | *----------------------------------------------------------------------* | ||
+ | FORM conv_folio USING p_xblnr TYPE bsis-xblnr | ||
+ | CHANGING p_folio TYPE ze_folio. | ||
+ | |||
+ | DATA l_string TYPE string. | ||
+ | |||
+ | CLEAR p_folio. | ||
+ | |||
+ | l_string = p_xblnr. | ||
+ | REPLACE FIRST OCCURRENCE OF REGEX '(.{2})(.{2})(.{2})(.{1})(.{1})(.{2})(.{6})' | ||
+ | IN l_string WITH '0208020$3$2$7'. | ||
+ | IF sy-subrc = 0. | ||
+ | p_folio = l_string. | ||
+ | ENDIF. | ||
+ | |||
+ | ENDFORM.</nowiki> | ||
===usar REGEX como IF=== | ===usar REGEX como IF=== | ||
ejemplo para verificar por clase de entrega | ejemplo para verificar por clase de entrega | ||
− | data l_lfart type string. | + | <nowiki>data l_lfart type string. |
− | + | l_lfart = likp-lfart. | |
− | + | find REGEX 'Y101|Y100|Y102' in l_lfart. | |
− | + | if sy-subrc = 0. | |
− | + | write:/ 'continue'. | |
− | + | else. | |
− | + | write:/ 'Exit'. | |
− | + | endif.</nowiki> | |
==DEMOS== | ==DEMOS== | ||
Line 110: | Line 152: | ||
==Regular Expression Patterns== | ==Regular Expression Patterns== | ||
<nowiki>Escape character | <nowiki>Escape character | ||
− | + | Special character Meaning | |
− | + | \ Escape character for special characters | |
− | + | Special Characters for single character string | |
− | + | Special character Meaning | |
− | + | . Placeholder for any single character | |
− | + | \C Placeholder for any single character | |
− | + | \d Placeholder for any single digit | |
− | + | \D Placeholder for any character other than a digit | |
− | + | \l Placeholder for any lower-case letter | |
− | + | \L Placeholder for any character other than a lower-case letter | |
− | + | \s Placeholder for a blank character | |
− | + | \S Placeholder for any character other than a blank character | |
− | + | \u Placeholder for any upper-case letter | |
− | + | \U Placeholder for any character other than an upper-case letter | |
− | + | \w Placeholder for any alphanumeric character including _ | |
− | + | \W Placeholder for any non-alphanumeric character except for _ | |
− | + | [ ] Definition of a value set for single characters | |
− | + | [^ ] Negation of a value set for single characters | |
− | + | [ - ] Definition of a range in a value set for single characters | |
− | + | [ [:alnum:] ] Description of all alphanumeric characters in a value set | |
− | + | [ [:alpha:] ] Description of all letters in a value set | |
− | + | [ [:blank:] ] Description for blank characters and horizontal tabulators in a value set | |
− | + | [ [:cntrl:] ] Description of all control characters in a value set | |
− | + | [ [:digit:] ] Description of all digits in a value set | |
− | + | [ [:graph:] ] Description of all graphic special characters in a value set | |
− | + | [ [:lower:] ] Description of all lower-case letters in a value set | |
− | + | [ [:print:] ] Description of all displayable characters in a value set | |
− | + | [ [:punct:] ] Description of all punctuation characters in a value set | |
− | + | [ [:space:] ] Description of all blank characters, tabulators, and carriage feeds in a value set | |
− | + | [ [:unicode:] ] Description of all Unicode characters in a value set with a code larger than 255 | |
− | + | [ [:upper:] ] Description of all upper-case letters in a value set | |
− | + | [ [:word:] ] Description of all alphanumeric characters in a value set, including _ | |
− | + | [ [:xdigit:] ] Description of all hexadecimal digits in a value set | |
− | + | \a \f \n \r \t \v Diverse platform-specific control characters | |
− | + | [..] Reserved for later enhancements | |
− | + | [==] Reserved for later enhancements | |
− | + | Special Characters for character string patterns | |
− | + | Special character Meaning | |
− | + | {n} Concatenation of n single characters | |
− | + | {n,m} Concatenation of at least n and a maximum of m single characters | |
− | + | {n,m}? Reserved for later enhancements | |
− | + | ? One or no single characters | |
− | + | * Concatenation of any number of single characters including 'no characters' | |
− | + | *? Reserved for later enhancements | |
− | + | + Concatenation of any number of single characters excluding 'no characters' | |
− | + | +? Reserved for later enhancements | |
− | + | | Linking of two alternative expressions | |
− | + | ( ) Definition of subgroups with registration | |
− | + | (?: ) Definition of subgroups without registration | |
− | + | \1, \2, \3 ... Placeholder for the register of subgroups | |
− | + | \Q ... \E Definition of a string of literal characters | |
− | + | (? ... ) Reserved for later enhancements | |
− | + | Special Characters for search string | |
− | + | Special character Meaning | |
− | + | ^ Anchor character for the start of a line | |
− | + | \A Anchor character for the start of a character string | |
− | + | $ Anchor character for the end of a line | |
− | + | \Z Anchor character for the end of a character string | |
− | + | \< Start of a word | |
− | + | \> End of a word | |
− | + | \b Start or end of a word | |
− | + | \B Space between characters within a word | |
− | + | (?= ) Preview condition | |
− | + | (?! ) Negated preview condition | |
− | + | Special Characters for replacement texts | |
− | + | Special character Meaning | |
− | + | $0, $& Placeholder for the whole found location | |
− | + | $1, $2, $3... Placeholder for the register of subgroups | |
− | + | $` Placeholder for the text before the found location</nowiki> | |
− | + | ||
+ | ===ejemplos=== | ||
+ | ^ start line | ||
+ | $ end line | ||
+ | ^\w+$ matches one or more word characters (same as [a-zA-Z0-9_]+). Ex. TRUE: 33737733aaaaaa_aaaaaa FALSE: 33737733aaa+aaa_aaaaaa | ||
+ | ^[0-9]+$ or ^\d+$ Full Numeric Strings | ||
+ | \S+, one or more non-whitespaces | ||
[[Category:ABAP]] | [[Category:ABAP]] |
Latest revision as of 17:21, 21 March 2022
Contents
Ejemplos REGEX
Ejemplo de Uso de regex en ABAP
DATA: lt_match_result TYPE match_result_tab. data: l_regex type string, l_string type string. data: l_matches TYPE i. l_regex = '^[^<>()\[\]\\,;:\s@"`]+@([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}$'. l_string = 'pablo.tapia@sapwiki.cl'. FIND ALL OCCURRENCES OF REGEX l_regex IN l_string IN CHARACTER MODE RESPECTING CASE MATCH COUNT l_matches RESULTS lt_match_result. if l_matches le 0. message i000(0k) with 'E-mail no valido' display like 'E'. return. endif.
validar rut (muy simple)
FIND REGEX '[0-9]{1,8}-([0-9]|K)' IN l_strng.
valida e-mail
^[^<>()\[\]\\,;:\s@"`]+@([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}$
validar Números
validar número 1.1111 correcto -1.1111 correcto 1.11111- correcto 1111 correcto ^[-?0-9]+([.])?([0-9]+)?-?$ números de 2 enteros y 7 decimales 1.1234567 correcto 11.1234560 correcto ^[0-9]{1,2}\.([0-9]{7})+$ con signo izquierda -1.1234567 correcto 1.1234567 correcto ^-?[0-9]{1,2}\.([0-9]{7})+$ con signo derecha o izquierda ^-?[0-9]{1,2}\.([0-9]{7})+-?$ validar número entero ^[0-9]+$ numero NNN.NN valido 111.1 11.11 1 ^\d{1,3}(\.\d{1,2})?$ numero entero con máximo de 13 caracteres valido 1234567890111 111 1 ^\d{1,13}$ MODULE verificar_folio INPUT. DATA l_string TYPE string. DATA l_folio(7) TYPE n. IF zfi_datoscajas-folio IS NOT INITIAL. MOVE zfi_datoscajas-folio TO l_string. CONDENSE l_string. FIND REGEX '[^\d]' IN l_string IN CHARACTER MODE RESPECTING CASE. IF sy-subrc = 0. MESSAGE e000(0k) WITH 'Folio deber contener solo números'. ELSE. MOVE l_string TO l_folio. MOVE l_folio TO zfi_datoscajas-folio. ENDIF. ENDIF. ENDMODULE.
Elimina prefijo
* NC00000009 -> 00000009 *saca prefijos de XBLNR data l_xblnr type string. l_xblnr = vbrk-xblnr. REPLACE all OCCURRENCES OF REGEX '[[:alpha:]]' IN l_xblnr with ''. if sy-subrc = 0. .... endif.
ejemplo 2
REPLACE all OCCURRENCES OF REGEX '[^\d]' in l_xblnr WITH ''.
convertir fecha (yyyymmdd->dd/mm/yyyy)
data l_fecha(10). l_fecha = sy-datum. replace FIRST OCCURRENCE OF REGEX '(\d{4})(\d{2})(\d{2})' in l_fecha WITH '$3/$2/$1'. write:/ l_fecha.
Convierte folio
* Folio1: PRmmaaRppnnnnnn * Folio2: 0208020 + aa + mm + nnnnnn * Ejemplo: PR0720R007188233 se convierte en 02080202007188233 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM conv_folio USING p_xblnr TYPE bsis-xblnr CHANGING p_folio TYPE ze_folio. DATA l_string TYPE string. CLEAR p_folio. l_string = p_xblnr. REPLACE FIRST OCCURRENCE OF REGEX '(.{2})(.{2})(.{2})(.{1})(.{1})(.{2})(.{6})' IN l_string WITH '0208020$3$2$7'. IF sy-subrc = 0. p_folio = l_string. ENDIF. ENDFORM.
usar REGEX como IF
ejemplo para verificar por clase de entrega data l_lfart type string. l_lfart = likp-lfart. find REGEX 'Y101|Y100|Y102' in l_lfart. if sy-subrc = 0. write:/ 'continue'. else. write:/ 'Exit'. endif.
DEMOS
RS_SIC_REGEX_CHECK DEMO_REGEX_TOY
Regular Expression Patterns
Escape character Special character Meaning \ Escape character for special characters Special Characters for single character string Special character Meaning . Placeholder for any single character \C Placeholder for any single character \d Placeholder for any single digit \D Placeholder for any character other than a digit \l Placeholder for any lower-case letter \L Placeholder for any character other than a lower-case letter \s Placeholder for a blank character \S Placeholder for any character other than a blank character \u Placeholder for any upper-case letter \U Placeholder for any character other than an upper-case letter \w Placeholder for any alphanumeric character including _ \W Placeholder for any non-alphanumeric character except for _ [ ] Definition of a value set for single characters [^ ] Negation of a value set for single characters [ - ] Definition of a range in a value set for single characters [ [:alnum:] ] Description of all alphanumeric characters in a value set [ [:alpha:] ] Description of all letters in a value set [ [:blank:] ] Description for blank characters and horizontal tabulators in a value set [ [:cntrl:] ] Description of all control characters in a value set [ [:digit:] ] Description of all digits in a value set [ [:graph:] ] Description of all graphic special characters in a value set [ [:lower:] ] Description of all lower-case letters in a value set [ [:print:] ] Description of all displayable characters in a value set [ [:punct:] ] Description of all punctuation characters in a value set [ [:space:] ] Description of all blank characters, tabulators, and carriage feeds in a value set [ [:unicode:] ] Description of all Unicode characters in a value set with a code larger than 255 [ [:upper:] ] Description of all upper-case letters in a value set [ [:word:] ] Description of all alphanumeric characters in a value set, including _ [ [:xdigit:] ] Description of all hexadecimal digits in a value set \a \f \n \r \t \v Diverse platform-specific control characters [..] Reserved for later enhancements [==] Reserved for later enhancements Special Characters for character string patterns Special character Meaning {n} Concatenation of n single characters {n,m} Concatenation of at least n and a maximum of m single characters {n,m}? Reserved for later enhancements ? One or no single characters * Concatenation of any number of single characters including 'no characters' *? Reserved for later enhancements + Concatenation of any number of single characters excluding 'no characters' +? Reserved for later enhancements | Linking of two alternative expressions ( ) Definition of subgroups with registration (?: ) Definition of subgroups without registration \1, \2, \3 ... Placeholder for the register of subgroups \Q ... \E Definition of a string of literal characters (? ... ) Reserved for later enhancements Special Characters for search string Special character Meaning ^ Anchor character for the start of a line \A Anchor character for the start of a character string $ Anchor character for the end of a line \Z Anchor character for the end of a character string \< Start of a word \> End of a word \b Start or end of a word \B Space between characters within a word (?= ) Preview condition (?! ) Negated preview condition Special Characters for replacement texts Special character Meaning $0, $& Placeholder for the whole found location $1, $2, $3... Placeholder for the register of subgroups $` Placeholder for the text before the found location
ejemplos
^ start line $ end line ^\w+$ matches one or more word characters (same as [a-zA-Z0-9_]+). Ex. TRUE: 33737733aaaaaa_aaaaaa FALSE: 33737733aaa+aaa_aaaaaa ^[0-9]+$ or ^\d+$ Full Numeric Strings \S+, one or more non-whitespaces