Você não especifica nenhuma ferramenta, então eu uso perl
como exemplo:
$ echo Pty[R=4]@ID | perl -nle '
print "$1\n$2\n$3\n$4"
if /^([a-zA-Z0-9]*)(\[([a-zA-Z0-9=]*)\]){0,1}@([a-zA-Z0-9]*)$/
'
Pty
[R=4]
R=4
ID
$ echo Pty@ID | perl -nle '
print "$1\n$2\n$3\n$4"
if /^([a-zA-Z0-9]*)(\[([a-zA-Z0-9=]*)\]){0,1}@([a-zA-Z0-9]*)$/
'
Pty
ID
Com o grupo de captura de expressões regulares, você pode usar referências anteriores para obter as correspondências anteriores. Em perl
, você pode usar $1
, $2
, ..., $n
.
No seu caso, você pode usar um grupo sem captura para evitar que [R=4]
seja capturado:
$ echo Pty[R=4]@ID |
perl -nle '
print "$1\n$2\n$3"
if /^([a-zA-Z0-9]*)(?:\[([a-zA-Z0-9=]*)\]){0,1}@([a-zA-Z0-9]*)$/
'
Pty
R=4
ID
Como você mencionou php
em seu comentário, você pode usar backreference do php sintaxe ou
\g1
ou \g{1}
.