>백엔드 개발 >PHP 튜토리얼 >PHP에서 정규식의 올바른 사용에 대한 지침

PHP에서 정규식의 올바른 사용에 대한 지침

巴扎黑
巴扎黑원래의
2017-08-09 14:35:261428검색
정규식은 텍스트를 처리하는 강력한 방법을 제공합니다. 정규식을 사용하면 사용자 입력에 대한 복잡한 유효성 검사를 수행하고, 사용자 입력 및 파일 콘텐츠를 구문 분석하고, 문자열 형식을 다시 지정할 수 있습니다. PHP는 사용자에게 POSIX 및 PCRE 정규식을 사용하는 쉬운 방법을 제공합니다. 이 튜토리얼에서는 POSIX와 PCRE의 차이점을 설명하고 PHP V5에서 정규식을 사용하는 방법을 설명합니다.

시작하기 전에

이 튜토리얼에서 배울 수 있는 내용과 이를 최대한 활용하는 방법을 알아보세요.

PHP에서 정규식의 올바른 사용에 대한 지침이 튜토리얼 정보

정규 표현식은 텍스트를 처리하는 강력한 방법을 제공합니다. 정규식을 사용하면 사용자 입력의 복잡한 유효성 검사를 수행하고, 사용자 입력 및 텍스트 콘텐츠를 구문 분석하고, 문자열 형식을 다시 지정할 수 있습니다.

PHP에서 정규식의 올바른 사용에 대한 지침목표

이 튜토리얼은 POSIX 및 PCRE 정규식을 사용하는 간단한 방법에 중점을 두고 있어 PHP 정규식에 능숙해집니다. POSIX와 PCRE의 차이점을 살펴보고 PHP V5에서 정규식을 사용하는 방법도 다룰 것입니다. 이 튜토리얼을 따르면 정규 표현식을 사용하는 방법, 시기, 이유를 배울 수 있습니다.

PHP에서 정규식의 올바른 사용에 대한 지침시스템 요구 사항

PHP가 설치된 Microsoft® Windows® 유사 또는 UNIX® 유사 시스템(Mac OS X 및 Linux® 포함)에서 이 튜토리얼을 완료할 수 있습니다. 우리가 소개하는 것은 모두 PHP 내장 플러그인이므로 시스템에 PHP만 설치하면 되며 다른 소프트웨어를 설치할 필요가 없습니다.

Start

PHP에서 정규식의 올바른 사용에 대한 지침정규 표현식이란 무엇인가요?

몇 년 전 저는 웹 양식의 입력 필드에 대해 몇 가지 흥미로운 테스트를 수행했습니다. 사용자는 이 양식에 전화번호를 입력합니다. 그러면 이 전화번호는 사용자가 입력하는 대로 광고에 인쇄됩니다. 필요에 따라 미국 전화번호는 (555) 555-5555 또는 555-555-5555 등 여러 가지 방법으로 입력할 수 있지만 555-5555는 허용되지 않습니다.

숫자가 아닌 문자를 모두 버리고 남은 문자의 총 개수가 10인지 확인하는 것은 어떨까요? 이 접근 방식은 작동하지만 사용자가 !555?333-3333과 같은 문자를 입력하는 것을 막지는 못합니다.

웹 개발자의 관점에서 보면 이러한 상황은 흥미로운 도전이 됩니다. 다양한 형식을 확인하는 루틴을 작성할 수 있지만 사용자가 555.555.5555와 같은 형식을 허용하는 경우 어느 정도 유연성을 허용하는 솔루션을 찾고 싶습니다.

이것이 바로 정규식(줄여서 정규식)이 적합한 것입니다. 이전에 앱에 잘라내어 붙여넣은 적이 있지만 이해하기 어려운 구문 문제는 발견되지 않았습니다. 정규식은 수학적 표현과 매우 비슷해 보입니다. 2x2=4 형식의 표현식을 보면 일반적으로 '2 곱하기 2는 4'라고 생각합니다. 정규식은 매우 유사합니다. 이 글을 읽은 후 ^b$와 같은 정규식을 보면 "줄의 시작은 b이고 그 다음은 줄의 끝이다"라고 스스로에게 말하게 될 것입니다. 뿐만 아니라, PHP에서 정규식을 사용하는 것이 얼마나 쉬운지 깨닫게 될 것입니다.

PHP에서 정규식의 올바른 사용에 대한 지침정규식을 사용해야 하는 경우

따라야 할 규칙이 있는 경우 검색 및 바꾸기 작업을 완료하려면 정규식을 사용해야 하지만, 찾거나 바꿔야 하는 정확한 문자가 있을 필요는 없습니다. 예를 들어 위에서 언급한 전화번호 예에서 사용자는 입력된 전화번호의 형식을 나타내는 규칙을 정의하지만 전화번호에 포함된 숫자는 나타내지 않습니다. 이는 사용자 입력이 많은 시나리오에도 적용됩니다. 미국 주 약어는 A부터 Z까지 두 개의 대문자로 제한됩니다. 여기에서는 정규식을 사용할 수도 있으므로 대소문자 또는 길이 문제에 관계없이 양식의 텍스트나 사용자 입력을 알파벳 문자로 간단히 제한할 수 있습니다.

PHP에서 정규식의 올바른 사용에 대한 지침정규식을 사용하지 말아야 할 경우

정규식은 강력하지만 몇 가지 결함도 있습니다. 그 중 하나는 표현을 읽고 쓰는 능력이 필요합니다. 애플리케이션에 정규식을 포함하기로 결정한 경우 전체 주석을 달아야 합니다. 이렇게 하면 나중에 다른 사람이 표현식을 변경해야 하는 경우 기능을 방해하지 않고 변경할 수 있습니다. 또한 정규식 사용에 익숙하지 않은 경우 디버깅하기 어려울 수 있습니다.

이러한 어려움을 피하려면 더 간단한 내장 함수로 문제를 충분히 해결할 수 있는 경우 정규식을 사용하지 마세요.

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,而是匹配行的开头。


PHP에서 정규식의 올바른 사용에 대한 지침表 1. 行锚

描述
^ 匹配一行的开头
$ 匹配一行的结尾

限定符 应用于紧接于其前的表达式(参见表 2)。使用限定符,您可以指定在一次搜索中查找到一个表达式的次数。例如,表达式 a+ 将一次或多次地查找到字母 a


PHP에서 정규식의 올바른 사용에 대한 지침表 2. 限定符

限定符 描述
? 限定符之前的表达式可被查找到 0 次或 1 次
+ 限定符之前的表达式可被查找到 1 次或多次
* 限定符之前的表达式可被查找到任意次(含 0 次)
{n} 限定符之前的表达式仅可被查找到 n 次
{n,m} 限定符之前的表达式可被查找到 n 次到 m 次之间

在 regex 中,捕获文本并在替换和搜索操作中引用该文本是一项非常有用的特性(参见表 3)。通过使用捕获功能,您可以执行搜索,来查找重复的单词和闭合的 HTML 及 XML 标记。如果您在替换时使用了捕获功能,那么可以将找回的文本置入替换字符串内。后面将给出一个示例,展示如何以超链接替换电子邮件地址。


PHP에서 정규식의 올바른 사용에 대한 지침表 3. 分组与捕获

정규식 구문
字符类 描述
()
🎜POSIX와 PCRE 구현은 특정 기능과 문자 클래스에 대한 지원이 다르지만 구문은 동일합니다. 각 정규식은 하나 이상의 문자, 특수 문자(메타 문자라고도 함), 문자 클래스 및 문자 그룹으로 구성됩니다. 🎜🎜POSIX와 PCRE는 동일한 와일드카드를 사용합니다. 정규식의 와일드카드는 "여기에 있는 모든 것"을 의미합니다. 와일드카드 문자는 영어 마침표(.)입니다. 영어 마침표나 점을 찾으려면 이스케이프 문자 /(/.)를 사용하세요. 라인 앵커 및 한정자와 같이 아래에서 설명하는 다른 특수 문자에도 동일하게 적용됩니다. 문자가 정규 표현식에서 특별한 의미를 갖는 경우 원래 문자 그대로의 의미를 표현하려면 이스케이프 처리해야 합니다. 🎜🎜라인 앵커는 라인의 시작과 끝과 일치하지만 텍스트를 캡처하지 않는 특수 메타 문자입니다(표 1 참조). 예를 들어 줄이 문자 a로 시작하는 경우 ^a 표현식의 줄 앵커는 문자 a를 캡처하지 않고 대신 의 시작 부분과 일치합니다. 🎜🎜
PHP에서 정규식의 올바른 사용에 대한 지침표 1. 행 앵커
🎜🎜
앵커 설명
^🎜🎜 줄의 시작 부분 일치🎜🎜
$🎜 줄의 끝 부분 일치 line🎜🎜🎜 🎜🎜한정자는 바로 앞의 표현식에 적용됩니다(표 2 참조). 한정자를 사용하면 검색에서 표현식이 발견되는 횟수를 지정할 수 있습니다. 예를 들어, a+ 표현식은 a 문자를 한 번 이상 찾습니다. 🎜🎜
PHP에서 정규식의 올바른 사용에 대한 지침표 2. 한정자
🎜🎜
한정자 설명
?🎜 🎜The 한정자 앞의 표현식은 0회 또는 1회 검색 가능🎜🎜
+🎜🎜한정자 앞의 표현식은 1회 이상 검색 가능🎜 🎜
*🎜🎜한정자 앞의 표현식은 여러 번 검색할 수 있습니다(0회 포함)🎜🎜
{n}🎜🎜한정자 앞의 표현식은 n번만 찾을 수 있습니다🎜🎜
{n, m}🎜🎜한정자 앞의 표현식은 n번에서 m번 사이에서 찾을 수 있습니다🎜🎜🎜🎜🎜정규식에서 텍스트를 캡처하고 바꾸기 및 검색 작업 중에 이 텍스트를 참조하는 것은 매우 유용한 기능입니다(표 3 참조). ). 캡처 기능을 사용하면 검색을 수행하여 중복된 단어를 찾고 HTML 및 XML 태그를 닫을 수 있습니다. 교체 시 캡처 기능을 사용하면 검색된 텍스트를 교체 문자열에 배치할 수 있습니다. 이메일 주소를 하이퍼링크로 바꾸는 방법을 보여주는 예는 나중에 제공됩니다. 🎜🎜
PHP에서 정규식의 올바른 사용에 대한 지침표 3. 그룹화 및 캡처
🎜🎜
문자 클래스 설명
()🎜🎜문자를 그룹화하고 텍스트를 캡처할 수 있습니다🎜🎜🎜🎜

PHP에서 정규식의 올바른 사용에 대한 지침POSIX 문자 클래스

POSIX 정규식은 많은 정규식 구현에서 사용할 수 있도록 하는 몇 가지 표준을 따릅니다(표 4 참조). 예를 들어 POSIX 정규식을 작성하는 경우 PHP에서 사용할 수 있고, grep 명령을 통해 사용할 수 있으며, 정규식을 지원하는 다양한 편집기를 통해 사용할 수 있습니다. . grep 命令使用它,也可以通过许多支持正则表达式的编辑器使用它。


PHP에서 정규식의 올바른 사용에 대한 지침表 4. POSIX 字符类

字符 描述
[:alpha:] 匹配包含字母与数字的字符
[:digit:] 匹配任意数字
[:space:] 匹配任意空白

POSIX 匹配

有两个使用 POSIX 正则表达式搜索字符串的函数,即 ereg()eregi()

PHP에서 정규식의 올바른 사용에 대한 지침ereg()

ereg() 方法为特定正则表达式搜索字符串。如果未找到任何匹配项,则返回 0,因此您可以给出如下测试:


PHP에서 정규식의 올바른 사용에 대한 지침清单 1. ereg() 方法

<?php
$phonenbr="555-555-5555";
// Syntax is ereg( regex, string [, out_captures_array])
if (ereg("[-[:digit:]]{12}", $phonenbr)) {
    print("Found match!/n");
} else {
    print("No match found!/n");
}
?>

正则表达式 [-[:digit:]]{12} 查找 12 个为数字或连字符的字符。就处理电话号码而言,这有些粗略,您也可将其改写成这样的形式:^[0-9]{3}-[0-9]{3}-[0-9]{4}$。(在 regex 中,[0-9][:digit:] 实际上是完全相同的,您可能更愿意使用 [0-9] 的形式,因为它更短些。)这种作为替代方案的表达式显然更为精确。它会查找行的开头(^),后接一组 3 个数字([0-9]{3})、一个连字符(-)、另外一组 3 个数字、另外一个连字符、一组 4 个数字,然后是行的结尾($)。当您手工编写表达式时,这会使您了解到正则表达式要处理的问题的复杂程度如何,从而有助于预测出使用表达式搜索或替换的数据类型。

PHP에서 정규식의 올바른 사용에 대한 지침eregi()

eregi() 方法类似于 ereg(),不同之处在于它对大小写不敏感。它将返回一个包含所找到的匹配项长度的整数,但您很可能会将其用于条件语句中,如下所示:


PHP에서 정규식의 올바른 사용에 대한 지침清单 2. eregi() 方法

<?php
$str="Hello World!";
// Syntax is ereg( regex, string [, out_captures_array])
if (eregi("hello", $str)) {
    print("Found match!/n");
} else {
    print("No match found!/n");
}
?>

执行此示例时,将输出 Found match!,这是因为在忽略大小写的搜索中找到了 hello。如果您使用的是 ereg,搜索将失败。

POSIX 替换

ereg_replace()eregi_replace() 这两种方法用于在文本中进行替换,具有 POSIX 正则表达式的特性。

PHP에서 정규식의 올바른 사용에 대한 지침ereg_replace()

您可以使用 ereg_replace() 方法以 POSIX 正则表达式语法进行大小写敏感的替换。如下示例描述了如何替换带有超链接的字符串内的电子邮件地址:


PHP에서 정규식의 올바른 사용에 대한 지침清单 3. ereg_replace() 方法

<?php
$origstr = "My e-mail address is: first.last@example.com";
// Syntax is: ereg_replace( regex, replacestr, string )
$newstr = /
ereg_replace("([.[:alpha:][:digit:]]+@[.[:alpha:][:digit:]]+)", 
    "<a href=/"mailto://1/">//1</a>", $origstr);
print("$newstr/n");
?>

这是一条用于匹配电子邮件地址的正则表达式的不完整版本,但它展示了与 str_replace() 等其他普通替换函数相比,ereg_replace() 的强大之处。在使用正则表达式时,您可定义搜索的规则,而不是搜索文字字符。

PHP에서 정규식의 올바른 사용에 대한 지침eregi_replace()

除忽略大小写之外,eregi_replace() 函数与 ereg_replace()


PHP에서 정규식의 올바른 사용에 대한 지침표 4. POSIX 문자 클래스

문자 설명
[:alpha:]
문자와 숫자가 포함된 문자와 일치
[:digit:]
모든 숫자와 일치🎜🎜
[:space:]🎜 🎜 공백 일치🎜🎜🎜🎜🎜🎜POSIX 일치🎜🎜POSIX 함수를 사용하는 두 가지 정규 표현식이 있습니다. 문자열, 즉 ereg()eregi()를 검색합니다. 🎜🎜🎜🎜ereg()🎜🎜🎜ereg() 메서드는 문자열에서 특정 정규식을 검색합니다. 일치하는 항목이 없으면 0이 반환되므로 다음과 같이 테스트할 수 있습니다. 🎜🎜🎜🎜🎜 목록 1. ereg() 메서드 🎜🎜🎜🎜🎜🎜🎜
<?php
$origstr = "1 BANANA, 2 banana, 3 Banana";
// Syntax is: eregi_replace( regex, replacestr, string )
$newstr = eregi_replace("banana", "pear", $origstr);
print("New string is: &#39;$newstr&#39;/n");
?>
🎜🎜🎜🎜🎜🎜정규식 [-[:digit:]]{12} 숫자 또는 하이픈인 12자를 찾습니다. 전화번호 처리에 관한 한 이는 다소 조잡합니다. 다음과 같이 다시 작성할 수도 있습니다. ^[0-9]{3}-[0-9]{3}-[0-9]{ 4 }$. (정규식에서 [0-9][:digit:]는 실제로 동일합니다. [0-9] 를 사용하는 것이 더 나을 수도 있습니다. 더 짧기 때문입니다.) 이 대체 표현이 분명히 더 정확합니다. 줄의 시작 부분(^)을 찾은 다음 3개의 숫자 집합([0-9]{3}), 하이픈()을 찾습니다. - ), 또 다른 3자리 숫자 집합, 또 다른 하이픈, 4자리 숫자 집합, 그리고 줄 끝($)입니다. 표현식을 직접 작성하면 정규 표현식이 처리하려는 문제의 복잡성에 대한 아이디어를 얻을 수 있으며, 이를 통해 검색하거나 표현식으로 대체할 데이터 유형을 예측하는 데 도움이 될 수 있습니다. 🎜🎜🎜🎜eregi()🎜🎜🎜eregi() 메서드는 대소문자를 구분하지 않는다는 점을 제외하면 ereg()와 유사합니다. 찾은 일치 항목의 길이를 포함하는 정수를 반환하지만 다음과 같은 조건문에서 이를 사용할 가능성이 높습니다. 🎜🎜🎜🎜🎜목록 2. eregi() 메서드 🎜🎜🎜🎜🎜🎜🎜
<?php
$array = array( "1", "3", "ABC", "XYZ", "42" );
// Syntax is preg_grep( regex, inputarray );
$grep_array = preg_grep("/^/d+$/", $array);
print_r($grep_array);
?>
🎜🎜🎜 🎜🎜🎜이 예제를 실행하면 대소문자 무시 검색에서 hello를 찾았기 때문에 Found match!가 출력됩니다. ereg를 사용하는 경우 검색이 실패합니다. 🎜🎜POSIX 대체🎜🎜ereg_replace()eregi_replace( ) 이 두 가지 방법은 텍스트의 치환을 수행하는 데 사용되며 POSIX 정규식의 특성을 가지고 있습니다. 🎜🎜🎜🎜ereg_replace()🎜🎜🎜 ereg_replace() 메서드를 사용하면 POSIX 정규식 구문에서 대소문자를 구분하여 바꿀 수 있습니다. 다음 예에서는 문자열 내의 이메일 주소를 하이퍼링크로 바꾸는 방법을 설명합니다. 🎜🎜🎜🎜🎜목록 3. ereg_replace() 메서드 🎜🎜🎜🎜🎜🎜🎜
<?php
$string = "abcdefgh";
$regex = "/^[a-z]+$/i";
// Syntax is preg_match(regex, string, [, out_matches [, flags [, offset]]]);
if (preg_match($regex, $string)) {
    printf("Pattern &#39;%s&#39; found in string &#39;%s&#39;/n", $regex, $string);
} else {
    printf("No match found in string &#39;%s&#39;!/n", $string);
}
?>
🎜🎜🎜🎜🎜🎜다음은 An incomplete의 예입니다. 이메일 주소 일치를 위한 정규 표현식 버전이지만 str_replace()와 같은 다른 일반 대체 함수와 비교하여 ereg_replace()가 얼마나 강력한지 보여줍니다. 정규식을 사용할 때 리터럴 문자 대신 검색 규칙을 정의합니다. 🎜🎜🎜🎜eregi_replace()🎜🎜🎜ereg_replace() 함수는 대소문자가 무시된다는 점을 제외하면 ereg_replace()와 동일합니다. 🎜🎜🎜🎜🎜List 4. eregi_replace () 기능🎜🎜🎜🎜🎜🎜🎜
<?php
$string = "The quick red fox jumped over the lazy brown dog";
$re = "//b/w+/b/";
// Syntax is preg_match_all( regex, string, return_array [, flags [, offset]])
preg_match_all($re, $string, $arrayout);
print_r($arrayout);
?>
🎜🎜🎜🎜
本例将 banana 替换为 pear,替换操作忽略了大小写。

PCRE 字符类

由于 PCRE 语法支持更短的字符类和更多的特性,因此它比 POSIX 语法更为强大。表 5 列出了 PCRE 中支持而在 POSIX 表达式中没有的部分字符类。


PHP에서 정규식의 올바른 사용에 대한 지침表 5. PCRE 字符类

字符类 描述
/b 词边界,查找词的开始和结尾
/d 匹配任意数字
/s 匹配任意空白,如 tab 或空格
/t 匹配一个 tab 字符
/w 匹配包含字母与数字的字符

PHP에서 정규식의 올바른 사용에 대한 지침PCRE 匹配

PHP 中的 PCRE 匹配函数与 POSIX 匹配函数类似,但如果您习惯使用 POSIX 表达式,那么 PCRE 匹配函数的一项特性可能会使您感到棘手:PCRE 函数要求表达式以分隔符开始和结束。在绝大多数示例中,分隔符都是一个 /,可在引号内表达式的开始和结尾处看到。务必牢记,此分隔符并非表达式的一部分。

在 PCRE 中的最后一个分隔符后,您可添加一个修饰符来更改正则表达式的行为。举例来说,i 修饰符使正则表达式对大小写不敏感。这是与 POSIX 方法的一项重要差异,在 POSIX 中,您需要按照对大小写敏感性的需求来调用不同的方法。

PHP에서 정규식의 올바른 사용에 대한 지침preg_grep()

preg_grep() 方法返回一个数组,其中包含通过正则表达式在其中找到匹配项的另外一个数组的全部项目。如果您有一个较大的值集,并希望对其进行搜索以查找匹配项,那么该方法非常有用。下面是一个示例:


PHP에서 정규식의 올바른 사용에 대한 지침清单 5. preg_grep() 方法

<?php
$array = array( "1", "3", "ABC", "XYZ", "42" );
// Syntax is preg_grep( regex, inputarray );
$grep_array = preg_grep("/^/d+$/", $array);
print_r($grep_array);
?>

在本例中,正则表达式 ^/d+$ 查找行的开始(^)和结尾($)之间包含一个或多个数字(/d+)的数组的所有元素。

PHP에서 정규식의 올바른 사용에 대한 지침preg_match()

preg_match() 函数使用 PCRE 在字符串中查找匹配项,它需要两个参数:regex 和字符串。您可以选择提供一个将由匹配项填充的数组、允许您修改匹配操作行为的标志,还可提供字符串中开始查找匹配项的位置(offset)。示例如下:


PHP에서 정규식의 올바른 사용에 대한 지침清单 6. offset 方法

<?php
$string = "abcdefgh";
$regex = "/^[a-z]+$/i";
// Syntax is preg_match(regex, string, [, out_matches [, flags [, offset]]]);
if (preg_match($regex, $string)) {
    printf("Pattern &#39;%s&#39; found in string &#39;%s&#39;/n", $regex, $string);
} else {
    printf("No match found in string &#39;%s&#39;!/n", $string);
}
?>

本例使用了正则表达式 ^[a-z]+$,在行的开始(^)和结尾($)之间搜索可查找到一次或多次的([a-z]+)、从 az 的任意字母。

PHP에서 정규식의 올바른 사용에 대한 지침preg_match_all()

preg_match_all() 函数为在字符串中查找到的全部匹配项构建一个数组。下例构建了一个包含句子中全部词的数组:


PHP에서 정규식의 올바른 사용에 대한 지침清单 7. preg_match_all() 函数

<?php
$string = "The quick red fox jumped over the lazy brown dog";
$re = "//b/w+/b/";
// Syntax is preg_match_all( regex, string, return_array [, flags [, offset]])
preg_match_all($re, $string, $arrayout);
print_r($arrayout);
?>

正则表达式 /b/w+/b 在词边界(/b)间查找可找到一次或多次的(/w+)单词字符。每个词都将置入输出数组 $arrayout 的一个数组元素中。

PCRE 替换

在 PHP 中进行 PCRE 替换与 POSIX 替换类似,不同之处在于使用的是 preg_replace() 而非 ereg_replace()eregi_replace()

PHP에서 정규식의 올바른 사용에 대한 지침preg_replace()

preg_replace() 函数使用 PCRE 进行替换。它需要这样几个参数:正则表达式、替换表达式和原始字符串。您还可以选择提供希望的最大替换数,以及以所完成的替换数填充的变量。示例如下:


PHP에서 정규식의 올바른 사용에 대한 지침清单 8. preg_replace() 函数

<?php
$orig_string = "5555555555";
printf("Original string is &#39;%s&#39;/n", $orig_string);
$re = "/^(/d{3})(/d{3})(/d{4})$/";
// Syntax is preg_replace( regex, replacement, string /
[, limit [, out_count]] );
$new_string = preg_replace($re, "(//1) //2-//3", $orig_string);
printf("New string is &#39;%s&#39;/n", $new_string);
?>

이 예에서는 텍스트의 일부를 캡처하고 //1와 같은 역참조를 사용하는 방법을 빠르게 보여줍니다. 이러한 역참조는 괄호 안에 일치하는 모든 텍스트에 삽입됩니다. 이 경우 //1는 그룹 1, (/d{3})와 일치합니다. //1。这些反向引用会插入圆括号内所匹配的任意文本中,在本例中,//1 匹配第 1 组 (/d{3})

在示例中,您可使用 substr 将电话号码分割开来,而对字符串只需进行少量更改,要依靠 substr 来可靠地捕获正确文本会更加困难。

如果字符串的形式可为 (555)5555555,您可将表达式修改为 ^(?(/d{3}))?(/d{3})(/d{4})$

예제에서는 substr을 사용하여 문자열을 몇 가지만 변경하여 전화번호를 분할할 수 있으며, substr를 사용하여 올바른 텍스트를 안정적으로 캡처할 수 있습니다. 더 어렵다.

문자열이 (555)5555555 형식일 수 있는 경우 표현식을 ^(?(/d{3}))?(/d{3}로 수정할 수 있습니다. ) (/d{4})$를 사용하여 괄호를 찾습니다.

결론

PHP는 정규 표현식에 POSIX와 PCRE라는 두 가지 구문을 제공합니다. 이 튜토리얼에서는 POSIX 및 PCRE 정규식을 지원하는 PHP의 주요 기능에 대한 높은 수준의 개요를 제공합니다.

정규식을 사용하면 규칙을 정의하여 텍스트 검색 및 바꾸기 이상의 더욱 강력한 검색 및 바꾸기 작업을 수행할 수 있습니다.

PHP에서 정규식의 올바른 사용에 대한 지침

참조


배우기

  • developerWorks 글로벌 사이트에서 이 문서의
    원문 영어 텍스트

    를 참조할 수 있습니다.


  • Regular-Expressions.info

    은 정규 표현식에 대한 관련 정보를 제공합니다.


  • PHP: 정규 표현식 함수(Perl 호환) - Manual

    은 PCRE 관련 콘텐츠를 다루는 PHP 온라인 문서입니다.


  • 정규 표현식 함수(POSIX 확장)

    은 POSIX에 대한 PHP 온라인 문서입니다.

  • PHP에 대한 자세한 내용은 개발자Works의
    PHP 프로젝트 리소스

    를 방문하세요.
  • PHP 프로그래밍 학습에 대한 개발자웍스 튜토리얼은 "PHP 배우기, 파트 1", 파트 2

    파트 3

    을 참조하세요.

  • 최신
    developerWorks 기술 이벤트 및 웹캐스트

    에 대해 알아보세요.

  • developerWorks
    오픈 소스 영역

    을 방문하여 오픈 소스 기술로 개발하고 이를 IBM 제품과 함께 사용하는 데 도움이 되는 광범위한 방법 정보, 도구 및 프로젝트 업데이트를 확인하세요.



제품과 기술을
  • PHP.net
    을 통해
    최신 버전의 PHP

    를 다운로드하세요.


  • 정규 표현식 라이브러리

    에는 대규모 정규 표현식 저장소가 있습니다.


  • DB2®, Lotus®, Rational®, Tivoli® 및 WebSphere®를 포함하여 Linux 플랫폼에서 IBM의 최신 평가판 소프트웨어가 포함된 두 개의 DVD인 Linux용 무료 SEK

    를 주문하세요.
  • 다운로드 또는 DVD로 제공되는
  • IBM 평가판 소프트웨어
를 사용하여 다음 오픈 소스 프로젝트를 혁신해 보세요.



Discuss
  • developerWorks 블로그
에 참여하여 개발자Works 커뮤니티에 참여하세요.

PHP에서 정규식의 올바른 사용에 대한 지침

작가 소개

Professional Red Hat Enterprise Linux 3(Wrox Press, 2004)은 Kapil Sharma 등과 공동 집필했습니다.

Nathan A. Good은 미네소타 주 트윈 시티의 작가입니다. , 소프트웨어 엔지니어 및 시스템 관리자. 그의 저서는 PHP 5 Recipes: A Problem-Solution Approach(Apress, 2005), Regular Expression Recipes for Windows Developers: A Problem-Solution Approach(Apress), Lee Babin et al. , 2005), Regular Expressions: A Problem-Solution Approach

(Apress Press, 2005) 및
🎜🎜🎜

위 내용은 PHP에서 정규식의 올바른 사용에 대한 지침의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.