Difference between revisions of "SAP ABAP REGEX"
From SapWiki
| Line 164: | Line 164: | ||
write:/ 'Exit'. | write:/ 'Exit'. | ||
endif.</nowiki> | endif.</nowiki> | ||
| + | |||
| + | ===obtener extensión de archivo=== | ||
| + | <nowiki> | ||
| + | FORM get_extension USING iv_file TYPE string | ||
| + | CHANGING ev_ex TYPE string. | ||
| + | |||
| + | DATA: lt_match_result TYPE match_result_tab. | ||
| + | DATA: lv_regex TYPE string, | ||
| + | lv_string TYPE string. | ||
| + | DATA: lv_matches TYPE i. | ||
| + | DATA: lv_file(250). | ||
| + | |||
| + | lv_regex = '\.([^.]+)$'. | ||
| + | lv_string = iv_file. | ||
| + | |||
| + | lv_file = iv_file. | ||
| + | |||
| + | FIND ALL OCCURRENCES OF REGEX lv_regex IN lv_string | ||
| + | IN CHARACTER MODE RESPECTING CASE | ||
| + | MATCH COUNT lv_matches RESULTS lt_match_result. | ||
| + | IF lv_matches > 0. | ||
| + | |||
| + | DESCRIBE TABLE lt_match_result LINES DATA(lv_lines). | ||
| + | READ TABLE lt_match_result INTO DATA(ls_result) INDEX lv_lines. "get the last occurrence | ||
| + | |||
| + | ls_result-offset = ls_result-offset + 1. | ||
| + | |||
| + | ev_ex = lv_file+ls_result-offset. | ||
| + | ENDIF. | ||
| + | |||
| + | ENDFORM.</nowiki> | ||
==DEMOS== | ==DEMOS== | ||
Revision as of 20:03, 3 October 2025
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.
convertir TIMESTAMP
DD.MM.YYYY HORA => YYYY-MM-DD HORA Ejemplo: 03.10.2025 14:55:44 => 2025-10-03 14:55:44
FORM get_timestamp CHANGING ev_timestamp TYPE string.
DATA: lv_short_timestamp TYPE timestamp.
DATA lv_timestamp(30).
GET TIME STAMP FIELD lv_short_timestamp.
WRITE lv_short_timestamp TO lv_timestamp TIME ZONE sy-zonlo.
REPLACE FIRST OCCURRENCE OF REGEX '(\d{2})\.(\d{2})\.(\d{4})\s(.*)'
IN lv_timestamp WITH '$3-$2-$1 $4'.
MOVE lv_timestamp TO ev_timestamp.
ENDFORM.
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.
obtener extensión de archivo
FORM get_extension USING iv_file TYPE string
CHANGING ev_ex TYPE string.
DATA: lt_match_result TYPE match_result_tab.
DATA: lv_regex TYPE string,
lv_string TYPE string.
DATA: lv_matches TYPE i.
DATA: lv_file(250).
lv_regex = '\.([^.]+)$'.
lv_string = iv_file.
lv_file = iv_file.
FIND ALL OCCURRENCES OF REGEX lv_regex IN lv_string
IN CHARACTER MODE RESPECTING CASE
MATCH COUNT lv_matches RESULTS lt_match_result.
IF lv_matches > 0.
DESCRIBE TABLE lt_match_result LINES DATA(lv_lines).
READ TABLE lt_match_result INTO DATA(ls_result) INDEX lv_lines. "get the last occurrence
ls_result-offset = ls_result-offset + 1.
ev_ex = lv_file+ls_result-offset.
ENDIF.
ENDFORM.
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