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} .