현재 다음 정규식을 사용하여 문자열을 그룹으로 분할하고 있습니다.
^([a-zA-Z0-9]*)(\[([a-zA-Z0-9=]*)\]){0,1}@([a-zA-Z0-9]*)$
Pty[R=4]@ID
네 개의 그룹이 있어요
1) Pty
2) [R=4]
3) R=4
4) ID
하지만 세 그룹만 필요합니다.
1) Pty
2) R=4
3) ID
이 정규식은 두 그룹을 모두 가져오려면 Pty@ID도 허용할 수 있어야 합니다.
1) Pty
2) ID
이 목표를 어떻게 달성할 수 있나요?
답변1
도구를 지정하지 않았으므로 perl
다음 예를 사용합니다.
$ 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
정규식 캡처 그룹을 사용하면 다음을 사용할 수 있습니다.역참조이전 일치 항목을 가져옵니다. 에서는 , ,..., 을 perl
사용할 수 있습니다 .$1
$2
$n
귀하의 경우에는 다음을 사용할 수 있습니다비캡처 그룹[R=4]
잡히지 않으려면 :
$ 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
php
댓글에서 언급했듯이 다음을 사용할 수 있습니다 .PHP 역참조문법 \1
또는 \g1
또는 \g{1}
.