기본 정규식에서 []와 \(\)의 차이점

기본 정규식에서 []와 \(\)의 차이점

고려하다:

$ 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. [1-3]둘 다 1, 2, 3을 의미하지 않나요 \(1\|3\|2\)? 그렇지 않다면 왜? 그들 사이의 차이점은 무엇입니까?
  2. 역참조가 왜 에서만 작동하나요 \(\)?

답변1

파트 1 관련: 예, 두 패턴 모두 1, 2 또는 3과 일치합니다.

첫 번째 질문에 대한 부분 답변두 번째 질문입니다. 재미있게.

괄호는 역참조를 활성화하고 연산자 우선 순위/그룹화를 명확하게 하는 데 사용됩니다.

대괄호로 묶음캐릭터 클래스. 그들은 일치하는 데 사용됩니다하나내부의 문자 세트 예제.

예를 들어 \(hello\)"hello"라는 단어를 일치시켜 적절한 역참조 변수( 등)에 넣 \1습니다 \2.

반면에 [hello]단일 문자, 즉 {e,h,l,o} 세트의 문자가 일치됩니다.

일부 추가 데이터(단지 추가 정보):

역참조는 닫는 괄호의 순서가 아니라 여는 괄호의 순서를 기준으로 합니다. 중첩된 괄호의 경우 이는 중요할 수 있습니다. 가독성을 위해 이스케이프 문자는 무시됩니다. 포함 및 포함 이 발생 (this (that) (the other))합니다 .\1this that the other\2that\3the other

문자 클래스를 계산하면 해당 문자 클래스의 더 많은 인스턴스가 있는지 확인됩니다. 같은 방식으로 일치할 필요는 없습니다. 예를 들어, [0-9]단일 숫자와 일치하며 [0-9]{5}5개의 숫자와 일치합니다. 5개만 일치시키고 싶다면반복하다예를 들어, 77777 또는 33333과 일치하지만 37497과 일치하지 않는 숫자는 역참조를 사용합니다.\([0-9]\)\1{4}

답변2

  • ()"그룹화하다"라는 의미와 부분을 설정한다는 의미1개의 프로젝트로 실행 가능하며 역참조용으로도 활용 가능합니다.
  • []방법상징놓다

따라서 단일 기호에 괄호만 사용하면 의미는 동일합니다. 그러나 일반적으로 다음과 같은 다중 기호 문자열에 사용됩니다.(cat|dog)

관련 정보