텍스트 및 일상 도구 · 텍스트 도구 키트
리터럴 또는 정규식? 검색어의 점이 모든 결과를 바꿀 수 있는 이유
· 그것이 중요한 이유
찾기 및 바꾸기 정규식 텍스트 편집
정규 표현식에서 어떤 문자가 의미를 전달하는지, 'a.b' 또는 'v1.2(베타)'가 패턴으로 처리될 때 무엇이 잘못되는지, 모든 것을 이스케이프하는 리터럴 모드가 기본값이 되어야 하는 이유를 설명합니다.
'v1.2' 검색 및 'v102' 일치 — 정규식 우선 도구가 조용히 구두점을 와일드카드로 바꾸는 방법
릴리스 노트에서 `v1.2`을(를) 변경하는 지원 담당자는 이 네 문자가 하나의 버전 레이블을 식별할 것이라고 합리적으로 기대할 수 있습니다. 그러나 Regex가 활성화되면 점은 줄 바꿈을 제외한 모든 문자를 의미합니다. 따라서 패턴은 `v102`, `v1-2` 또는 `v1x2`와 일치할 수 있으며 모두 바꾸기는 요청된 릴리스에 포함되지 않은 항목을 변경할 수 있습니다.
패턴이 유효하기 때문에 이 실패는 조용합니다. 의도적인 와일드카드와 파일 이름에서 복사된 구두점을 구별하는 오류 메시지는 없습니다. 첫 번째 경고는 예기치 않게 많은 교체 횟수일 수 있습니다. 작업이 알려진 텍스트를 정확하게 바꾸는 것이라면 구두점은 검색 엔진에 대한 명령이 아니라 데이터여야 합니다.
메타 문자 — 점, 대괄호, 괄호, 더하기, 별표, 물음표, 파이프, 캐럿, 달러, 백슬래시 및 각각의 기능
JavaScript 정규식 모드에서 점은 와일드카드입니다. 대괄호는 문자 클래스를 정의합니다. 괄호는 그룹을 생성합니다. 더하기, 별표 및 물음표는 반복을 제어합니다. 파이프는 대안을 제공합니다. 여러 줄 모드가 활성화되지 않았기 때문에 캐럿과 달러 기호는 이 도구에서 전체 텍스트의 시작이나 끝 부분에 패턴을 고정합니다.
백슬래시는 다음 문자를 읽는 방법을 변경하며 중괄호는 반복 횟수를 표현할 수 있습니다. 이러한 기호는 정규식 문법이 특수하게 처리하는 위치에서만 중요하므로 목록을 기억하는 것은 작업에 필요한 모드를 결정하는 것보다 신뢰성이 떨어집니다. 제공된 레이블, 경로 조각 또는 파일 이름과 일치하는 경우 문자 그대로 시작하십시오.
JavaScript 정규식 모드에서 중요한 메타문자
리터럴 모드를 사용하면 입력된 내용을 검색할 수 있습니다. ToolAcre는 검색을 컴파일하기 전에 정규식 메타 문자를 이스케이프하므로 `v1.2 (beta)`는 점, 공백 및 괄호 자체와 일치합니다. 구문을 와일드카드와 캡처 그룹으로 바꾸지 않고 텍스트 전체에서 정확한 항목을 모두 찾습니다.
해당 이스케이프는 검색 측에서만 발생합니다. 대체 필드는 여전히 JavaScript 대체 문자열 규칙을 따릅니다. 여기서 `$&`은 일치하는 텍스트를 삽입하고 `$$`은 1달러 기호를 생성합니다. 따라서 문자 검색은 텍스트를 식별하기 위한 안전한 기본값이지만 달러 기호가 포함된 대체 항목은 모두 바꾸기를 선택하기 전에 신중하게 검토할 가치가 있습니다.
정규식 모드 — 강력한 기능을 원할 때, 개별 문자를 직접 이스케이프 처리하는 방법
정규식 모드는 여러 양식이 하나의 규칙과 일치해야 할 때 유용합니다. 패턴은 모든 소스 철자를 나열하지 않고도 다양한 숫자, 선택적 구두점 또는 대안을 대상으로 할 수 있습니다. 해당 가변성이 의도적인 경우에만 Regex를 켜고 점의 경우 `.`와 같이 일반적인 의미를 유지해야 하는 경우 백슬래시를 사용하여 특수 문자를 이스케이프합니다.
도구는 JavaScript 정규식 구문을 사용하여 패턴을 컴파일하고 항상 전역적으로 적용합니다. 대소문자 구분을 지우면 대소문자 구분 없는 일치가 추가되지만 여러 줄, 점 전체, 고정 및 유니코드 플래그는 제공되지 않습니다. 텍스트를 변경하지 않고 잘못된 구문이 보고됩니다. 유효하지만 지나치게 광범위한 패턴이 여전히 실행되므로 컴파일 성공이 안전한 일치 집합의 증거는 아닙니다.
작업된 예 — 리터럴 모드에서 릴리스 노트 전체에서 'config.yml (이전)'을 바꾼 다음 정규식 모드에서 동일한 작업을 시도하여 차이점을 확인합니다.
`Load config.yml (old)`, `Archive configXyml old` 및 `Keep config.yml (new)`가 포함된 릴리스 노트를 고려하세요. Regex를 끈 상태에서 `config.yml (old)`을 검색하여 `config.yml (legacy)`로 바꿉니다. 패턴이 컴파일되기 전에 점과 괄호가 이스케이프되기 때문에 정확히 첫 번째 문구가 변경됩니다.
Regex를 켜고 이스케이프 처리되지 않은 동일한 검색을 제출합니다. 점은 다른 문자를 사용할 수 있지만 괄호는 리터럴 괄호와 일치하는 대신 `old` 그룹을 지정하므로 의도한 줄은 더 이상 작성된 대로 일치하지 않습니다. 해당 정규식에는 `config.yml (old)`이 필요합니다. 리터럴 버전은 더 짧고, 더 명확하며, 정확한 텍스트 작업에 더 적합합니다.
일반적인 실수 — 검색 상자의 후행 공백, 전체 단어와 리터럴의 혼합, 대체 개수 확인 잊어버리기
후행 공백은 검색 필드가 시각적 가중치를 거의 주지 않지만 리터럴 모드에서는 공백을 유지하므로 간과하기 쉽습니다. `beta `에 대한 검색은 줄 끝의 `beta`과 일치하지 않습니다. 명확하게 보이는 용어가 대체 항목을 보고하지 않는 경우 필드 경계를 확인하고 단순히 복사된 텍스트를 주변 산문과 분리하기 위해 공백을 추가하지 마십시오.
전체 단어는 리터럴의 다른 이름이 아닙니다. 컴파일된 검색을 단어 경계로 묶습니다. 여기서는 ASCII 기반이며 구두점이나 악센트가 있는 용어로 인해 실패할 수 있습니다. 또한 매 실행 후 교체 횟수를 검사하고 놀라운 경우 Undo를 사용하세요. 개수는 장식적인 성공 메시지가 아니라 범위에 대한 증거입니다.
일반적인 실수: 공백, 전체 단어 경계 및 대체 구문
이 페이지는 정규식 플래그에 대한 전체 가이드를 시도하지 않습니다. ToolAcre는 전역 일치와 선택적으로 대소문자를 구분하지 않는 일치를 사용하지만 앵커는 여전히 각 줄이 아닌 전체 텍스트를 참조합니다. 인라인 플래그, POSIX 클래스 또는 다른 구문이 있는 엔진에서 복사된 패턴은 컴파일에 실패하거나 브라우저에서 다른 의미를 나타낼 수 있습니다.
캡처 그룹이 지원되므로 도구 외부에 있다고 하기보다는 개요 수정이 필요합니다. Regex 모드에서는 교체 시 `$1`, `$2` 및 이후 번호를 사용하여 그룹을 참조할 수 있습니다. 해당 기능은 문자 검색 및 제한된 플래그 제어와는 별개입니다. 일치하는 텍스트를 재구성하는 것이 실제 목표인 경우에만 사용하십시오.
여기에서는 플래그가 제한되어 있지만 대체에서는 캡처 그룹이 지원됩니다.
실제 규칙은 간단합니다. 알려진 버전, 파일 이름, 제품 라벨 또는 문장 조각을 바꿀 때 Regex를 꺼 두십시오. 리터럴 모드는 대상을 식별하는 구두점을 유지하면서 특수 문자를 자동으로 이스케이프합니다. 패턴이 허용해야 하는 변형과 정확한 검색이 불충분한 이유를 명시할 수 있는 경우에만 Regex를 활성화하세요.
편집된 릴리스 노트를 커밋하기 전에 보고된 수를 예상한 변경 수와 비교하고 결과를 검사하십시오. ToolAcre는 유효하지 않은 패턴을 그대로 두고 너무 멀리 도달한 유효한 패턴에 대해 실행 취소를 제공합니다. 이러한 보호 장치는 도움이 되지만 문자 작업에 문자 모드를 선택하면 확장 일치가 발생하기 전에 방지됩니다.