![특정 수의 일치 항목만 얻기 위해 정규식을 사용하여 문자열을 구문 분석하는 방법은 무엇입니까? [폐쇄]](https://linux55.com/image/54783/%ED%8A%B9%EC%A0%95%20%EC%88%98%EC%9D%98%20%EC%9D%BC%EC%B9%98%20%ED%95%AD%EB%AA%A9%EB%A7%8C%20%EC%96%BB%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
현재 다음 정규식을 사용하여 문자열을 그룹으로 분할하고 있습니다.
^([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}
.