문제

다양한 정규식 사용 도구 / 언어 (예 : perl, sed, java, vim 등)의 정규식 기능에서 많은 공통점을 보았지만 많은 차이점도 있습니다.

모든 정규식 지원 도구 / 언어가 지원하는 정규식 기능의 표준 하위 집합이 있습니까?정규식 기능은 도구 / 언어간에 어떻게 다른가요?

도움이 되었습니까?

다른 팁

대부분의 정규식 도구 / 언어는 다음 기본 기능 을 지원합니다.

  1. 문자 클래스 / 세트 및 부정-[]
  2. 앵커-^ $
  3. 교체-|
  4. 수량 자-? + * {n, m}
  5. 메타 문자-\ w, \ s, \ d, ...
  6. 역 참조-\ 1, \ 2, ...
  7. 점-.
  8. 전역 및 대소 문자 무시를위한 / g 및 / i와 같은 간단한 수정 자
  9. 문자 이스케이프

    고급 도구 / 언어 지원 :

    1. 루카 헤드와 비하인드
    2. POSIX 문자 클래스
    3. 단어 경계
    4. 정규식의 작은 부분에만 대소 문자를 구분하지 않는 것과 같은 인라인 스위치
    5. 추가 서식 및 주석을 허용하는 / x, 여러 줄의 경우 / m
    6. 이름이 지정된 캡처
    7. 유니 코드

egrep이 아닌 grep regexp 문법이나 sed regexp 문법을 사용하고 여러 플랫폼과 도구에서 안전한 하위 집합을 사용해야한다고 사용했다면

당신을 괴롭힐 수있는 유일한 것은 FSA (Finite State Automatons)를 사용하는 정규 표현식 구현과 역 추적을 사용하는 구현 사이를 전환 할 때입니다.수량 자 구현은 grep마다 Perl에 따라 다릅니다.

FSA 기반 구현은 가능한 첫 번째 위치에서 가장 긴 일치 항목을 찾습니다.역 추적하는 사람들은 가능한 첫 번째 위치에서 시작하여 왼쪽 편향 첫 번째 일치를 찾습니다.즉, 일치하는 항목을 찾을 때까지 패턴의 순서대로 각 분기를 시도합니다.

"xyxyxyzz" 문자열과 "(xy)*(xyz)?" 패턴을 고려하세요.FSA 기반 엔진은 가능한 가장 긴 하위 문자열 인 "xyxyxyz"와 일치합니다.역 추적 기반 엔진은 왼쪽 편향 첫 번째 하위 문자열 인 "xyxyxy"와 일치합니다.

표준 엔진이 없습니다.그러나 POSIX 확장 정규식 형식은 대부분의 엔진에서 유효한 하위 집합이며 표준화 된 하위 집합에 도달하는 것과 비슷합니다.

emacs의 정규식 구문 참조 : http : //www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html#Regexps .

emacs의 구문은 이전 버전과의 호환성을 위해 설정되어 있다는 것을 읽은 기억이납니다. 따라서 모든 것 과 호환되기를 원한다면 모든 것이 이것과 호환되도록 만드십시오.일부 도구는이를 지원하고 다른 도구는 지원하지 않을 수 있습니다.

당신은 가치있는 목표를 가지고 있지만 도달하기가 매우 어려울 것이라고 생각하며 emacs의 정규 표현식도 함께 작업하는 데 어려움을 겪었습니다.당신을 더 행복하고 생산적으로 만들어 준다면 모든 것의 99 %가 충분할까요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top