C \ # 정규 표현 식 일치

2486 단어
때때로 우 리 는 (100 * (50 + 15) 와 같은 끼 워 넣 을 수 있 는 차원 적 인 구 조 를 필요 로 한다. 이때 간단하게 사용 / (. + /) 하면 맨 왼쪽 의 왼쪽 괄호 와 맨 오른쪽 괄호 사이 의 내용 만 일치 할 수 있다.만약 원래 문자열 의 왼쪽 괄호 와 오른쪽 괄호 가 나타 나 는 횟수 가 같 지 않다 면, 예 를 들 어 (5 / (3 + 2)), 우리 의 일치 하 는 결과 에서 두 개의 개수 도 같 지 않 을 것 이다.이 문자열 에서 가장 긴 괄호 사이 의 내용 을 일치 시 킬 수 있 는 방법 이 있 습 니까?
(당신 의 뇌 를 완전히 헷 갈 리 게 하 는 것 을 피하 기 위해 서, 우 리 는 괄호 대신 괄호 를 사용 하 는 것 이 좋 습 니 다. 지금 우리 의 문 제 는 xx aa > yy 와 같은 문자열 에서 가장 긴 쌍 의 괄호 안의 내용 을 어떻게 포착 하 느 냐 하 는 것 입 니 다.
여기에 다음 과 같은 문법 구 조 를 사용 해 야 한다.
  • (?'group')  캡 처 한 내용 을 group 이 라 고 명명 하고 스 택 에 누 르 기 (Stack)
  • (?'-group')  스 택 에서 마지막 으로 스 택 에 눌 러 넣 은 group 라 는 캡 처 내용 을 팝 업 합 니 다. 스 택 이 비어 있 으 면 이 그룹의 매 칭 이 실 패 했 습 니 다
  • (?(group)yes|no)  스 택 에 group 이라는 캡 처 내용 이 존재 한다 면 yes 부분 표현 식 과 계속 일치 합 니 다. 그렇지 않 으 면 no 부분
  • 과 계속 일치 합 니 다.
  • (?!)  0 너비 마이너스 선행 단언, 접미사 표현 식 이 없 기 때문에 일치 하려 고 시도 하 는 데 실패 합 니 다
  •  
    코드 세 션 (2)
    [코드] 정규 표현 식 설명01 02      [^<>]*                # 03      ( 04          ( 05              (? 'Open' "Open" 06              [^<>]*       # 07          )+ 08          ( 09              (? '-Open' >)   # , "Open" 10              [^<>]*        # 11          )+ 12      )* 13      (?(Open)(?!))         # , "Open" ; , 14
      15 >                         #
    [코드] 응용 예시 -- 일치 하 는 태그1
    ]*>[^<>]*(((? 'Open'
    ]*>)[^<>]*)+((? '-Open' )[^<>]*)+)*(?(Open)(?!))

    좋은 웹페이지 즐겨찾기