>  기사  >  백엔드 개발  >  PHP POSIX 정규 표현식

PHP POSIX 정규 표현식

藏色散人
藏色散人앞으로
2019-12-04 10:31:312197검색

1 기본 지식

정규 표현식은 텍스트의 패턴을 설명하는 방법입니다. 지금까지 사용한 정확한(문자 그대로) 일치도 정규식입니다. 예를 들어, 이전에는 "상점" 및 "배달"과 같은 정규 표현식 용어를 검색했습니다.

PHP에서 정규식 일치는 문자열의 특정 위치에 있기 때문에 동등 비교보다는 strstr() 일치와 더 유사합니다(지정되지 않은 경우 문자열의 어느 곳에나 있을 수 있음). 다른 문자열과 일치합니다. 예를 들어 문자열 "shop"은 정규식 "shop"과 일치합니다. 또한 정규식 "h", "ho" 등과도 일치할 수 있습니다.

문자를 정확하게 일치시키는 것 외에도 특수 문자를 사용하여 표현식의 메타 의미를 지정할 수도 있습니다. 예를 들어, 특수 문자를 사용하면 문자열의 시작이나 끝 부분에 있어야 하는 패턴, 패턴의 해당 부분이 반복될 수 있는 패턴 또는 패턴의 문자가 특정 유형에 속하도록 지정할 수 있습니다. 또한 특수 문자 발생을 기준으로 일치시킬 수도 있습니다. 다음으로 이러한 변경 사항을 하나씩 논의하겠습니다.

2 문자 세트 및 클래스

문자 세트를 사용하면 정확한 일치보다 더 강력한 정규식을 즉시 제공할 수 있습니다. 문자 세트는 특정 유형의 모든 문자를 일치시키는 데 사용할 수 있으며 실제로 일종의 와일드카드 문자입니다.

우선, 개행 문자(n)를 제외한 모든 문자를 대체하기 위해 문자를 와일드카드 문자로 사용할 수 있습니다. 예를 들어 정규 표현식

.at

은 "cat", "sat", "mat" 등과 일치할 수 있습니다. 일반적으로 이 와일드카드 일치는 운영 체제에서 파일 이름 일치에 사용됩니다.

그러나 정규식을 사용하면 일치시키려는 문자 유형을 더 구체적으로 지정할 수 있으며 문자가 속하는 집합을 지정할 수 있습니다. 이전 예에서 정규식은 "cat" 및 "mat"와 일치했지만 "#at"와도 일치할 수 있었습니다. a와 z 사이의 문자로 제한하려면 다음과 같이 지정할 수 있습니다.

[a-z]at

대괄호([])로 묶인 모든 내용은 문자 클래스입니다. 일치하는 문자가 속합니다. 대괄호 안의 표현식은 단 하나의 문자와 일치합니다.

세트를 나열할 수 있습니다. 예를 들어

[aeiou]

은 모음 자음을 나타내는 데 사용할 수 있습니다.

은 이전과 마찬가지로 하이픈이나 범위 집합을 사용하여 범위를 설명할 수도 있습니다.

[a-zA-Z]

이 범위 집합은 모든 대문자 또는 소문자를 나타냅니다.

또한 세트를 사용하여 문자가 특정 세트에 속하지 않음을 나타낼 수도 있습니다. 예를 들어,

[^a-z]

을 사용하면 a와 z 사이에 없는 모든 문자를 일치시킬 수 있습니다. 캐럿(^)이 대괄호로 묶인 경우에는 아니오를 의미합니다. 이 기호가 대괄호 밖에서 사용될 때는 또 다른 의미를 의미하는데, 이에 대해서는 나중에 자세히 소개하겠습니다.

3 반복

종종 독자들은 특정 문자열이나 문자 클래스가 두 번 이상 나타날 것임을 표시하고 싶어할 것입니다. 정규식에는 두 개의 특수 문자를 대신 사용할 수 있습니다. "*" 기호는 패턴이 0회 이상 반복될 수 있음을 나타내고, "+" 기호는 패턴이 1회 이상 반복될 수 있음을 나타낸다. 이 두 기호는 적용할 표현식 뒤에 배치되어야 합니다.

예:

[[:alnum:]]+

은 "최소 하나의 알파벳 문자"를 의미합니다.

4 하위 표현식

일반적으로 표현식을 여러 하위 표현식으로 분리하는 것은 매우 유용합니다. 예를 들어 "적어도 하나"를 의미할 수 있습니다. 이 문자열 중 정확히 일치해야 합니다." 이는 수학 표현식과 동일한 방식으로 괄호를 사용하여 수행할 수 있습니다.

예:

(very)*large

은 "대형", "매우 큼", "매우 매우 큼" 등과 일치할 수 있습니다.

5 하위 표현식 개수

숫자 표현식을 중괄호({}) 안에 사용하여 콘텐츠가 허용되는 횟수를 지정할 수 있습니다. 반복. 정확한 반복 횟수({3}는 3회 반복을 의미), 반복 범위({2, 4}는 2~4회 반복을 의미) 또는 개방형 반복 범위({2, 4})를 지정할 수 있습니다. 는 2~4회 반복을 의미합니다) }는 최소 2회 반복을 의미합니다.

예:

(very){1,3}

은 "매우", "매우 매우" 및 "매우 매우 매우" 일치를 의미합니다.

6 문자열의 시작 또는 끝 위치

[a-z] 패턴은 알파벳 소문자를 포함하는 모든 문자열과 일치합니다. 문자열에 문자가 하나만 있는지 또는 전체 긴 문자열에 일치하는 문자가 하나만 포함되어 있는지는 중요하지 않습니다.

특정 하위 표현식이 시작 부분, 끝 부분 또는 두 위치 모두에 나타나는지 여부를 결정하는 것도 가능합니다. 이는 찾고 있는 단어만 문자열에 표시되고 다른 단어는 나타나지 않도록 하려는 경우에 유용합니다.

캐럿(^)은 정규 표현식의 시작 부분에 사용되며, 이는 하위 문자열이 검색된 문자열의 시작 부분에 나타나야 함을 나타내며 문자 "$"는 문자열의 끝 부분에 사용됩니다. 하위 문자열이 문자열의 끝에 나타나야 함을 나타내는 정규식입니다.

예를 들어 다음은 문자열 시작 부분의 bob과 일치합니다.

^bob

이 패턴은 문자열 끝 부분에 com이 나타나는 문자열과 일치합니다.

com$
# 🎜🎜#마지막으로 이 패턴은 a와 z 사이에 문자가 하나만 포함된 문자열과 일치합니다.

^[a-z]$

7 Branch

可以使用正则表达式中的一条竖线来表示一个选择。例如,如果要匹配com、edu或net,就可以使用如下所示的表达式:

com|edu|net

8 匹配特殊字符

如果要匹配本节前面提到过的特殊字符,例如,.、{或者$,就必须在它们前面加一个反斜杠(\)。如果要匹配一个反斜杠,则必须用两个反斜杠(\\)来表示。

在PHP中,必须将正则表达式模式包括在一个单引号字符串中。使用双引号引用的正则表达式将带来一些不必要的复杂性。PHP还使用反斜杠来转义特殊字符——例如反斜杠。

如果希望在模式中匹配一个反斜杠,必须使用两个反斜杠来表示它是一个反斜杠字符,而不是一个转义字符。

同样,由于相同的原因,如果希望在一个双引号引用的PHP字符串中使用反斜杠字符,必须使用两个反斜杠。这可 能会有些混淆,这样要求的结果将是表示一个包含了反斜杠字符的正则表达式的一个PHP字符串需要4个反斜杠。PHP解释器将这4个反斜杠解释成2个。然 后,由正则表达式解释器解析为一个。

$符号也是双引号引用的PHP字符串和正则表达式的特殊字符。要使一个$字符能够在模式中匹配,必须使用“\\\$”。因为这个字符串被引用在双引号中,PHP解释器将其解析为\$,而正则表达式解释器将其解析成一个$字符。

9 在智能表单中应用

在智能表单应用程序中,正则表达式至少有两种用途。第一种用途是在顾客的反馈中查找特定的名词。使用正则表达 式,可以做得更智能一些。使用一个字符串函数,如果希望匹配"shop"、"customer service"或"retail",就必须做3次不同的搜索。如果使用一个正则表达式,就可以同时匹配所有3个,如下所示:

shop|customer service|retail

第二个用途是验证程序中用户的电子邮件地址,这需要通过用正则表达式来对电子邮件地址的标准格式进行编码。这 个格式中包含一些数字或标点符号,接着是符号“@”,然后是包括文字或数字和字符组成的字符串,后面接着是一个“.”(点号),后面包括文字或数字以连字 符组成的字符串,可能还有更多的点号,直到字符串结束,它的编码如下所示:

^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$

子表达式^[a-zA-Z0-9_\-.]+表示“至少由一个字母、数字、下画线、连字符、点号或者这些字符组合为开始的字符串”。请注意,当在一个字符类的开始或末尾处使用点号时,点号将失去其特殊通配符的意义,只能成为一个点号字符。

符号“@”匹配字符“@”。

而子表达式[a-zA-Z0-9\-]+与包含文字数字字符和连字符的主机名匹配。请注意,我们去除了连字符,因为它是方括号内的特殊字符。

字符组合“\.”匹配“.”字符。我们在字符类外部使用点号,因此必须对其转义,使其能够匹配一个点号字符。

子表达式[a-zA-Z0-9\-\.]+$匹配域名的剩下部分,它包含字母、数字和连字符,如果需要还可包含更多的点号直到字符串的末尾。

不难发现,有时一个无效的电子邮件地址也会符合这个正则表达式。找到所有无效电子邮件几乎是不可能的,但是经 过分析,情形将会有所改善。可以按许多不同的方式精化这个表达式。例如,可以列出所有有效的顶级域(TLD)。当对某些对象进行限制的时候,请千万小心, 因为可能排斥1%的有效数据的校验函数比允许出现10%的无效数据的校验函数还要麻烦。

推荐:《PHP教程

위 내용은 PHP POSIX 정규 표현식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 aliyun.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제