정규 표현 식 의 LookAround

2931 단어 잡기Perl
이 동쪽 에서 누군가가 그 를 둘 러 보 는 것 으로 직역 하 였 는데, 그래도 적절 한 편 이다.원래 이 물건 은 헤드 와 behind 두 가지 유형 으로 나 뉘 기 때문이다.
각각 앞의 것 을 찾 는 것 과 뒤의 부분 을 찾 는 것 을 나타 낸다.그리고 괄호 안에 있 는 내용 과 일치 하고 싶 은 지, 괄호 안에 있 는 내용 과 일치 하고 싶 지 않 은 지 에 따라 Positive 와 Negative 두 가지 로 나 뉜 다.그러면 현재 두 가지 차원 에서 각각 두 가지 분 법 이 있다 는 것 을 알 게 될 것 이다. 그래서 이것 은 LookAround 의 모든 네 가지 상황 을 조합 했다.
  • Positive Lookahead
  • Negative Lookahead
  • Positive Lookbehind
  • Negative Lookhehind

  • 위 에서 말 한 것 을 보 니 나 자신 도 어렵 고 예 를 들 어야 한다.
    내 파일 을 가정 하면 N 이 많은 abc - 123 - efg 형식의 문자열 이 있 습 니 다. 만약 에 이런 형식의 문자열 중의 숫자 를 꺼 내 려 면 어떻게 합 니까?(바로 위의 예 중의 123).
    가장 직관 적 인 생각 은 그룹 을 나 누 는 것 이자 정규 에서 자주 사용 하 는 수단 입 니 다. 예 를 들 어 아래 perl code (아래 코드 를 실행 하고 싶다 면 PATH 에 perl 이 있 는 지 확인 하 십시오)
    perl -e ' "abc-123-efg" =~ /\w+-(\d+)-\w+/; print "Total matched : $& and group 1 is : $1
    "; ' ##########print on the console########### # Total matched : abc-123-efg and group 1 is : 123

     위의 문장 과 실행 결 과 를 보면 123 을 얻 을 수 있 지만 123 은 그룹 1 의 일치 이 며 전체 pattern 의 일치 가 아니 라 전체 pattern 의 일치 가 전체 문자열 자체 입 니 다.즉, 위의 숫자 를 캡 처 하 는 것 은 정규 적 인 그룹 체 제 를 통 해 커 브 를 돌아 서 실 행 된 것 이다.
    이게 뭐 가 나 빠?사실 이것 도 나 쁘 지 않 아. 검 은 고양이 든 흰 고양이 든 쥐 를 잡 을 수 있 으 면 좋 은 고양이 야.그러나 때때로 당신 이 필요 로 하 는 일치 하 는 것 을 일치 하 는 결과 에 한꺼번에 반영 하 기 를 원 하 는 장면 을 만 날 수 있 습 니 다. 예 를 들 어 일부 텍스트 편집기 로 위의 파일 을 열 었 습 니 다. 예 를 들 어 텍스트 편집기 가 제공 하 는 정규 표현 식 을 이용 하여 위의 123 이라는 숫자 를 한꺼번에 일치 시 켰 습 니 다.보통 그 후에 편집기 에서 도 일치 하 는 결 과 를 강조 합 니 다.
    요컨대 이와 같은 장면 에 서 는 룩 어 라운드 가 등장 할 필요 가 있다.
    다음 예 는 Positive 의 lookbehind 와 lookahead 를 사 용 했 습 니 다.
    perl -e ' "abc-123-efg" =~ /(?<=\w{3}-)\d+(?=-\w+)/; print "Total matched : $& and group 1 is : $1
    "; ' ##########print on the console############ # Total matched : 123 and group 1 is :

     위 pattern 과 이전 예 를 비교 하 십시오. \ d + 는 그룹 에 없습니다. 대신 그 는 앞에서 positive lookbehind 를 사 용 했 고 뒤에 positive lookhead 를 사 용 했 습 니 다.이 예 에서 알 수 있 듯 이 positive 는 일치 해 야 하지만 일치 한 후에 이 일치 하 는 것 을 마지막 일치 하 는 결과 에 넣 지 않 고 이 부분 뒤에 (look behind) 또는 이전 (look ahead) 부분 을 일치 하 는 결과 에 넣 습 니 다.
    만약 당신 이 충분히 세심 하 다 면 위의 look behind 와 look ahead 의 pattern 의 양사 가 다르다 는 것 을 알 게 될 것 입 니 다. 하 나 는 고정 수량의 3 이 고 하 나 는 수량 을 제한 하지 않 는 + 입 니 다. 여 기 는 사실 우리 업무 상 숫자 앞의 문자열 의 길이 가 반드시 3 이기 때 문 이 아 닙 니 다.이 컴퓨터 perl 5.12 의 테스트 결과 perl 5.12 는 lookbehind 에서 길이 가 정 해 지지 않 은 양 어 를 사용 하 는 것 을 지원 하지 않 기 때 문 입 니 다. lookbehind 와 같이 쓰 면 다음 과 같은 오 류 를 얻 을 수 있 습 니 다.
    Variable length lookbehind not implemented in regex m/(?<=\w+-)\d+(?=-\w+)/ at -e line 1.

     자, 위 에 간단 한 positive lookbehind 와 lookahead 의 예 를 들 었 습 니 다. 아직 두 개의 negative lookhebind 와 lookahead 가 남 았 습 니 다. 이것 은 positive 와 가장 큰 차이 점 입 니 다. 이름 에서 도 하나, 둘 을 알 아 맞 힐 수 있 을 것 이 라 고 믿 습 니 다. 바로 그것 과 맞지 않 는 것 입 니 다.에, 말 하기 도 정말 까다롭다.구체 적 인 것 은 남 의 외국인 이 쓴 예 를 보 는 것 이 좋 겠 다. 이 글 은 매우 상세 하 게 써 서 자세히 읽 을 만하 다.

    좋은 웹페이지 즐겨찾기