문제
다양한 정규식 사용 도구 / 언어 (예 : perl, sed, java, vim 등)의 정규식 기능에서 많은 공통점을 보았지만 많은 차이점도 있습니다.
모든 정규식 지원 도구 / 언어가 지원하는 정규식 기능의 표준 하위 집합이 있습니까?정규식 기능은 도구 / 언어간에 어떻게 다른가요?
해결책
다른 팁
대부분의 정규식 도구 / 언어는 다음 기본 기능 을 지원합니다.
- 문자 클래스 / 세트 및 부정-[]
- 앵커-^ $
- 교체-|
- 수량 자-? + * {n, m}
- 메타 문자-\ w, \ s, \ d, ...
- 역 참조-\ 1, \ 2, ...
- 점-.
- 전역 및 대소 문자 무시를위한 / g 및 / i와 같은 간단한 수정 자
- 문자 이스케이프
고급 도구 / 언어 지원 :
- 루카 헤드와 비하인드
- POSIX 문자 클래스
- 단어 경계
- 정규식의 작은 부분에만 대소 문자를 구분하지 않는 것과 같은 인라인 스위치
- 추가 서식 및 주석을 허용하는 / x, 여러 줄의 경우 / m
- 이름이 지정된 캡처
- 유니 코드
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 %가 충분할까요?