정규식 매뉴얼

읽다(27700) 업데이트 시간(2022-04-13)

정규식은 정규식이라고도 합니다. (영어: 정규식, 코드에서 regex, regexp 또는 RE로 종종 축약됨)는 컴퓨터 과학의 개념입니다. 일반 테이블은 일반적으로 특정 패턴(규칙)과 일치하는 텍스트를 검색하고 바꾸는 데 사용됩니다.


정규식은 사전 정의된 특정 문자와 이러한 특정 문자의 조합을 사용하여 "규칙 문자열"을 형성하는 문자열 연산을 위한 논리식입니다.

많은 프로그래밍 언어는 정규식을 사용한 문자열 연산을 지원합니다. 예를 들어 Perl에는 강력한 정규식 엔진이 내장되어 있습니다. 정규식의 개념은 원래 Unix의 도구 소프트웨어(예: sed 및 grep)에 의해 대중화되었습니다. 정규식은 종종 "regex"로 축약되며, 단수형에는 regexp, regex가 포함되고, 복수형에는 regexps, regexes 및 regexen이 포함됩니다.

첫 번째 정규식 예!

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP中文网教程(php.sn)</title>
</head>
<body>

<script>
var str = "abc123def";
var patt1 = /[0-9]+/;
document.write(str.match(patt1));
</script>

</body>
</html>

인스턴스 실행 »

온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요

팁: 저희 정규식 튜토리얼은 초급부터 고급까지 정규식 지식을 배우는 데 도움이 됩니다. 궁금한 점이 있으시면 PHP 중국어 웹사이트 Regular Expression Community에 가셔서 질문하시면 열성적인 네티즌들이 답변해 드립니다.

정규 표현식 기능

  • 매우 강력한 유연성, 논리 및 기능성

  • 매우 간단한 방법으로 복잡한 문자열 제어를 신속하게 달성할 수 있습니다.

  • 처음 접하는 사람들에게는 상대적으로 모호하고 이해하기 어렵습니다.

정규식의 주요 적용 대상이 텍스트이기 때문에 유명한 편집기인 EditPlus부터 Microsoft Word, Visual Studio와 같은 대형 편집기에 이르기까지 다양한 텍스트 편집기에서 정규식을 사용하여 처리할 수 있습니다. 텍스트 내용.

Purpose

정규식과 다른 문자열이 주어지면 다음 목적을 달성할 수 있습니다.

  • 주어진 문자열이 정규식의 필터링 논리("일치"라고 함)를 준수하는지 여부

  • 우리는 다음을 얻을 수 있습니다. 정규식을 통해 문자열에서 원하는 특정 부분을 찾습니다.

일반 엔진

일반 엔진은 크게 두 가지 범주로 나눌 수 있습니다.

  • 하나는 DFA,

  • 하나는 NFA입니다.

두 엔진 모두 오랜 역사(현재 20년 이상)를 가지고 있으며, 이 두 엔진으로 생산되는 변형도 많습니다! 따라서 POSIX를 도입하면 불필요한 변형이 계속해서 생성되는 것을 방지할 수 있습니다. 이러한 방식으로 주류 일반 엔진은 1. DFA, 2. 기존 NFA, 3. POSIX NFA의 세 가지 범주로 나뉩니다.

DFA 엔진은 역추적이 필요하지 않으므로 선형 시간에 실행됩니다(따라서 동일한 문자를 두 번 테스트하지 않습니다). 또한 DFA 엔진은 가능한 가장 긴 문자열이 일치하는지 확인합니다. 그러나 DFA 엔진에는 제한된 상태만 포함되어 있기 때문에 패턴을 역참조와 일치시킬 수 없으며 명시적인 확장을 구성하지 않기 때문에 하위 표현식을 캡처할 수 없습니다.

기존 NFA 엔진은 지정된 순서로 정규식의 가능한 모든 확장을 테스트하고 첫 번째 일치를 허용하는 소위 "탐욕스러운" 일치 역추적 알고리즘을 실행합니다. 기존 NFA는 성공적인 일치를 얻기 위해 정규식의 특정 확장을 구성하므로 하위 식 일치와 일치하는 역참조를 모두 캡처할 수 있습니다. 그러나 기존 NFA는 역추적하기 때문에 정확히 동일한 상태에 여러 번 액세스할 수 있습니다(다른 경로를 통해 도달한 경우). 따라서 최악의 경우에는 매우 느리게 수행될 수 있습니다. 기존 NFA는 찾은 첫 번째 일치 항목을 수락하기 때문에 다른(아마도 더 긴) 일치 항목이 발견되지 않을 수도 있습니다.

POSIX NFA 엔진은 가능한 가장 긴 일치 항목을 찾을 수 있을 때까지 계속 역추적한다는 점을 제외하면 기존 NFA 엔진과 유사합니다. 따라서 POSIX NFA 엔진은 기존 NFA 엔진보다 느리며 POSIX NFA를 사용할 때 더 긴 일치 검색 대신 더 짧은 일치 검색을 지원하기 위해 되돌아보기 검색 순서를 변경하고 싶지 않을 것입니다.

DFA 엔진을 사용하는 주요 프로그램은 다음과 같습니다.

awk,egrep,flex,lex,MySQL,Procmail等;

기존 NFA 엔진을 사용하는 주요 프로그램은 다음과 같습니다.

GNU Emacs,Java,ergp,less,more,.NET语言,PCRE library,Perl,PHP,Python,Ruby,sed,vi;

POSIX NFA 엔진을 사용하는 주요 프로그램은 다음과 같습니다.

mawk,Mortice Kern Systems’ utilities,GNU Emacs(使用时可以明确指定);

DFA/NFA 하이브리드도 있습니다. 엔진:

GNU awk,GNU grep/egrep,Tcl。

NFA와 DFA 작업의 차이점을 간략하게 설명하는 예:

예를 들어 this is yansen's blog 문자열이 있고 정규 표현식은 /ya(msen|nsen|nsem)/ (don 표현은 신경 쓰지 마세요. 이는 단지 엔진 간의 관계를 설명하기 위한 것입니다.) 작업 차이) NFA는 다음과 같이 작동합니다. 먼저 문자열에서 y를 검색한 다음 a가 뒤에 오는지 일치합니다. 그렇지 않으면 뒤에 n이 오는지 일치합니다. msen 선택 분기는 현재 제거되었습니다.

그런 다음 계속해서 s, e가 오는지 확인한 다음 n인지 테스트합니다. n이 아니면 일치가 성공한 것입니다. 왜 남? NFA는 정규식을 기반으로 작동하고 문자열을 반복적으로 테스트하기 때문에 동일한 문자열이 여러 번 테스트될 수 있습니다!

DFA는 그렇지 않습니다. DFA는 이것에서 t부터 순서대로 y를 검색하여 y를 찾고, 뒤에 a가 오는 것이 확인되면 해당 표현식에 a가 있는지 확인합니다. 여기있어. 그러면 문자열 a 뒤에 n이 오고, DFA는 차례로 표현식을 테스트합니다. 이때 msen은 요구 사항을 충족하지 않아 제거됩니다. nsen과 nsem이 요구 사항을 충족한 후 DFA가 문자열을 순서대로 확인합니다. n in sen이 감지되면 nsen 분기만 요구 사항을 충족하고 일치가 성공합니다.

이를 보면 두 엔진이 완전히 다른 방식으로 작동한다는 것을 알 수 있습니다. 하나(NFA)는 표현 지향이고 다른 하나(DFA)는 텍스트 지향입니다! 일반적으로 DFA 엔진은 검색 속도가 더 빠릅니다. 그러나 NFA는 표현 지향적이고 조작하기 쉽기 때문에 대부분의 프로그래머는 NFA 엔진을 선호합니다! 두 엔진 모두 고유한 장점을 갖고 있으며 실제 인용은 귀하의 필요와 사용하는 언어에 따라 다릅니다.

이 정규식 튜토리얼 매뉴얼에서 다루는 내용

이 정규식 튜토리얼은 정규식 구문, 정규식 메타 문자, 정규식 연산자 우선 순위, 정규식 표현식 일치 규칙 등을 포함하여 정규식에 대한 모든 기본 및 고급 지식을 다룹니다.

팁: 이 튜토리얼의 각 장에는 많은 정규식 예제가 포함되어 있습니다. "예제 실행" 버튼을 직접 클릭하면 결과를 온라인으로 볼 수 있습니다. 이러한 예는 정규식을 더 잘 이해하는 방법을 배우는 데 도움이 됩니다.

기타 정규 표현식 관련 학습 참조 리소스

이 페이지 오른쪽의 지식 확장 외에도 다음 리소스도 모두를 위해 선택되었습니다