고려하다:
$ echo '<H1>heading</H1>' | grep '<H\(1\|3\|2\)>.*</H\1>'
$ <H1>heading</H1>
그리고
$ echo '<H1>heading</H3>' | grep '<H[1-3]>.*</H\1>'
$ grep: Invalid back reference
첫 번째 명령은 제대로 작동합니다.
[1-3]
둘 다 1, 2, 3을 의미하지 않나요\(1\|3\|2\)
? 그렇지 않다면 왜? 그들 사이의 차이점은 무엇입니까?- 역참조가 왜 에서만 작동하나요
\(\)
?
답변1
파트 1 관련: 예, 두 패턴 모두 1, 2 또는 3과 일치합니다.
첫 번째 질문에 대한 부분 답변예두 번째 질문입니다. 재미있게.
괄호는 역참조를 활성화하고 연산자 우선 순위/그룹화를 명확하게 하는 데 사용됩니다.
대괄호로 묶음캐릭터 클래스. 그들은 일치하는 데 사용됩니다하나내부의 문자 세트 예제.
예를 들어 \(hello\)
"hello"라는 단어를 일치시켜 적절한 역참조 변수( 등)에 넣 \1
습니다 \2
.
반면에 [hello]
단일 문자, 즉 {e,h,l,o} 세트의 문자가 일치됩니다.
일부 추가 데이터(단지 추가 정보):
역참조는 닫는 괄호의 순서가 아니라 여는 괄호의 순서를 기준으로 합니다. 중첩된 괄호의 경우 이는 중요할 수 있습니다. 가독성을 위해 이스케이프 문자는 무시됩니다. 포함 및 포함 이 발생 (this (that) (the other))
합니다 .\1
this that the other
\2
that
\3
the other
문자 클래스를 계산하면 해당 문자 클래스의 더 많은 인스턴스가 있는지 확인됩니다. 같은 방식으로 일치할 필요는 없습니다. 예를 들어, [0-9]
단일 숫자와 일치하며 [0-9]{5}
5개의 숫자와 일치합니다. 5개만 일치시키고 싶다면반복하다예를 들어, 77777 또는 33333과 일치하지만 37497과 일치하지 않는 숫자는 역참조를 사용합니다.\([0-9]\)\1{4}
답변2
()
"그룹화하다"라는 의미와 부분을 설정한다는 의미끈1개의 프로젝트로 실행 가능하며 역참조용으로도 활용 가능합니다.[]
방법상징놓다
따라서 단일 기호에 괄호만 사용하면 의미는 동일합니다. 그러나 일반적으로 다음과 같은 다중 기호 문자열에 사용됩니다.(cat|dog)