정규식은 텍스트를 처리하는 강력한 방법을 제공합니다. 정규식을 사용하면 사용자 입력에 대한 복잡한 유효성 검사를 수행하고, 사용자 입력 및 파일 콘텐츠를 구문 분석하고, 문자열 형식을 다시 지정할 수 있습니다. PHP는 사용자에게 POSIX 및 PCRE 정규식을 사용하는 쉬운 방법을 제공합니다. 이 튜토리얼에서는 POSIX와 PCRE의 차이점을 설명하고 PHP V5에서 정규식을 사용하는 방법을 설명합니다.
시작하기 전에
이 튜토리얼에서 배울 수 있는 내용과 이를 최대한 활용하는 방법을 알아보세요.
이 튜토리얼 정보
정규 표현식은 텍스트를 처리하는 강력한 방법을 제공합니다. 정규식을 사용하면 사용자 입력의 복잡한 유효성 검사를 수행하고, 사용자 입력 및 텍스트 콘텐츠를 구문 분석하고, 문자열 형식을 다시 지정할 수 있습니다.
목표
이 튜토리얼은 POSIX 및 PCRE 정규식을 사용하는 간단한 방법에 중점을 두고 있어 PHP 정규식에 능숙해집니다. POSIX와 PCRE의 차이점을 살펴보고 PHP V5에서 정규식을 사용하는 방법도 다룰 것입니다. 이 튜토리얼을 따르면 정규 표현식을 사용하는 방법, 시기, 이유를 배울 수 있습니다.
시스템 요구 사항
PHP가 설치된 Microsoft® Windows® 유사 또는 UNIX® 유사 시스템(Mac OS X 및 Linux® 포함)에서 이 튜토리얼을 완료할 수 있습니다. 우리가 소개하는 것은 모두 PHP 내장 플러그인이므로 시스템에 PHP만 설치하면 되며 다른 소프트웨어를 설치할 필요가 없습니다.
Start
정규 표현식이란 무엇인가요?
몇 년 전 저는 웹 양식의 입력 필드에 대해 몇 가지 흥미로운 테스트를 수행했습니다. 사용자는 이 양식에 전화번호를 입력합니다. 그러면 이 전화번호는 사용자가 입력하는 대로 광고에 인쇄됩니다. 필요에 따라 미국 전화번호는 (555) 555-5555 또는 555-555-5555 등 여러 가지 방법으로 입력할 수 있지만 555-5555는 허용되지 않습니다.
숫자가 아닌 문자를 모두 버리고 남은 문자의 총 개수가 10인지 확인하는 것은 어떨까요? 이 접근 방식은 작동하지만 사용자가 !555?333-3333과 같은 문자를 입력하는 것을 막지는 못합니다.
웹 개발자의 관점에서 보면 이러한 상황은 흥미로운 도전이 됩니다. 다양한 형식을 확인하는 루틴을 작성할 수 있지만 사용자가 555.555.5555와 같은 형식을 허용하는 경우 어느 정도 유연성을 허용하는 솔루션을 찾고 싶습니다.
이것이 바로 정규식(줄여서 정규식)이 적합한 것입니다. 이전에 앱에 잘라내어 붙여넣은 적이 있지만 이해하기 어려운 구문 문제는 발견되지 않았습니다. 정규식은 수학적 표현과 매우 비슷해 보입니다. 2x2=4 형식의 표현식을 보면 일반적으로 '2 곱하기 2는 4'라고 생각합니다. 정규식은 매우 유사합니다. 이 글을 읽은 후 ^b$와 같은 정규식을 보면 "줄의 시작은 b이고 그 다음은 줄의 끝이다"라고 스스로에게 말하게 될 것입니다. 뿐만 아니라, PHP에서 정규식을 사용하는 것이 얼마나 쉬운지 깨닫게 될 것입니다.
정규식을 사용해야 하는 경우
따라야 할 규칙이 있는 경우 검색 및 바꾸기 작업을 완료하려면 정규식을 사용해야 하지만, 찾거나 바꿔야 하는 정확한 문자가 있을 필요는 없습니다. 예를 들어 위에서 언급한 전화번호 예에서 사용자는 입력된 전화번호의 형식을 나타내는 규칙을 정의하지만 전화번호에 포함된 숫자는 나타내지 않습니다. 이는 사용자 입력이 많은 시나리오에도 적용됩니다. 미국 주 약어는 A부터 Z까지 두 개의 대문자로 제한됩니다. 여기에서는 정규식을 사용할 수도 있으므로 대소문자 또는 길이 문제에 관계없이 양식의 텍스트나 사용자 입력을 알파벳 문자로 간단히 제한할 수 있습니다.
정규식을 사용하지 말아야 할 경우
정규식은 강력하지만 몇 가지 결함도 있습니다. 그 중 하나는 표현을 읽고 쓰는 능력이 필요합니다. 애플리케이션에 정규식을 포함하기로 결정한 경우 전체 주석을 달아야 합니다. 이렇게 하면 나중에 다른 사람이 표현식을 변경해야 하는 경우 기능을 방해하지 않고 변경할 수 있습니다. 또한 정규식 사용에 익숙하지 않은 경우 디버깅하기 어려울 수 있습니다.
이러한 어려움을 피하려면 더 간단한 내장 함수로 문제를 충분히 해결할 수 있는 경우 정규식을 사용하지 마세요.
POSIX 및 PCRE
PHP는 POSIX(이식 가능한 운영 체제 구현)와 PCRE(Perl 호환 정규 표현식)라는 두 가지 정규식 구현을 지원합니다. 두 가지 구현은 서로 다른 기능을 제공하지만 PHP에서도 사용하기가 동일하게 간단합니다. 사용하는 정규식 스타일은 과거 경험과 정규식 사용 습관에 따라 달라집니다. PCRE 표현식이 POSIX 표현식보다 약간 빠르다는 증거가 있지만 대부분의 응용 프로그램에서는 이 차이가 그다지 중요하지 않습니다.
이 문서의 예에서는 각 정규식 메서드의 구문이 주석에 포함되어 있습니다. 함수 구문에서 regex는 regex
매개변수이고 검색되는 문자열은 string
입니다. 괄호 안의 매개변수는 선택사항입니다. 본 튜토리얼에서는 주로 기본 내용을 소개하므로 모든 선택 매개변수를 소개하지는 않습니다. regex
参数,所搜索的字符串为 string
。括号中的参数是可选的,由于本教程主要介绍基础内容,故不会给出全部可选参数的介绍。
正则表达式语法
尽管 POSIX 和 PCRE 实现在对某些特性和字符类的支持方面有所不同,但它们的语法是相同的。每个正则表达式都是由一个或多个字符、特殊字符(有时也称为元字符)、字符类和字符组构成的。
POSIX 和 PCRE 使用相同的通配符 —— 在 regex 中以通配符来表示 “此处可为任意内容”。通配符字符为一个英文句号或点(.
)。若要查找英文句号或点,可使用转义字符 /
: /.
。下文中所讨论的其他特殊字符也是如此,例如行锚(line anchor)和限定符。如果一个字符在正则表达式中有特殊含义,那么必须通过转义才能表达其原本的文字含义。
行锚 是特殊的元字符,与一行的开头和结尾相匹配,但不会捕获任何文本(参见表 1)。例如,如果某一行以字母 a
开头,那么表达式 ^a
中的行锚不会捕获字母 a
,而是匹配行的开头。
表 1. 行锚
锚 | 描述 |
---|---|
^ |
匹配一行的开头 |
$ |
匹配一行的结尾 |
限定符 应用于紧接于其前的表达式(参见表 2)。使用限定符,您可以指定在一次搜索中查找到一个表达式的次数。例如,表达式 a+
将一次或多次地查找到字母 a
。
表 2. 限定符
限定符 | 描述 |
---|---|
? |
限定符之前的表达式可被查找到 0 次或 1 次 |
+ |
限定符之前的表达式可被查找到 1 次或多次 |
* |
限定符之前的表达式可被查找到任意次(含 0 次) |
{n} |
限定符之前的表达式仅可被查找到 n 次 |
{n,m} |
限定符之前的表达式可被查找到 n 次到 m 次之间 |
在 regex 中,捕获文本并在替换和搜索操作中引用该文本是一项非常有用的特性(参见表 3)。通过使用捕获功能,您可以执行搜索,来查找重复的单词和闭合的 HTML 及 XML 标记。如果您在替换时使用了捕获功能,那么可以将找回的文本置入替换字符串内。后面将给出一个示例,展示如何以超链接替换电子邮件地址。
表 3. 分组与捕获
字符类 | 描述 |
---|---|
() |
정규식 구문 |
.
)입니다. 영어 마침표나 점을 찾으려면 이스케이프 문자 /
(/.
)를 사용하세요. 라인 앵커 및 한정자와 같이 아래에서 설명하는 다른 특수 문자에도 동일하게 적용됩니다. 문자가 정규 표현식에서 특별한 의미를 갖는 경우 원래 문자 그대로의 의미를 표현하려면 이스케이프 처리해야 합니다. 🎜🎜라인 앵커는 라인의 시작과 끝과 일치하지만 텍스트를 캡처하지 않는 특수 메타 문자입니다(표 1 참조). 예를 들어 줄이 문자 a
로 시작하는 경우 ^a
표현식의 줄 앵커는 문자 a
를 캡처하지 않고 대신 의 시작 부분과 일치합니다. 🎜🎜앵커 | 설명 | 🎜|||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
^ 🎜🎜 줄의 시작 부분 일치🎜🎜 | ||||||||||||||||||||||||||||||||||||||||||||||||||
$ 🎜 |
줄의 끝 부분 일치 line🎜🎜🎜 🎜🎜한정자는 바로 앞의 표현식에 적용됩니다(표 2 참조). 한정자를 사용하면 검색에서 표현식이 발견되는 횟수를 지정할 수 있습니다. 예를 들어, a+ 표현식은 a 문자를 한 번 이상 찾습니다. 🎜🎜표 2. 한정자 🎜
|
위 내용은 PHP에서 정규식의 올바른 사용에 대한 지침의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!