찾다
백엔드 개발PHP 튜토리얼PHP中的正则表达式_PHP

正则表达式

综述

正则表达式是一种可以用于模式匹配和替换的强有力的工具。正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。

如何使用基本模式匹配?

  模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符重复出现,或表示上下文。我们先看一些正则表达式中的特殊字符。

特殊字符"^"用来匹配以指定字符串开头的字符串。例如:

"^hello" :这个模式与字符串"hello,PHP world!"匹配,但是与"Say hello to you"不匹配。

特殊字符"$"用来匹配以指定字符串结尾的字符串。例如:

"you$" :这个模式与"How are you"匹配,与"your"不匹配。

当特殊字符"^"和"$"同时使用时,表示精确匹配。例如:

"^hello$" :这个模式只匹配字符串"hello"。

如果一个模式不包括"^"和"$",那么它与任何包含该模式的字符串匹配。例如: "you" :与字符串"What is your name?"是匹配的。

在该模式中的字母只是普通的字符,数字也是一样的。

如果要用到其他一些稍微复杂的字符,如标点符号和空白字符(比如空格、制表符等),就要要用到转义序列。所有的转义序列都用反斜杠("\")打头,例如制表符的转义序列是:"\t"。所以如果我们要检测一个字符串是否以制表符开头,可以用这个模式:

"^\t"

类似的,用"\n"表示换行,"\r"表示回车,反斜杠本身用"\\"表示,句号"."用"\."表示,依此类推。

如何使用字符簇?

如果要判断用户输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于字面的字符串比较是不够的。所以要用一种更好的方法来描述我们想要的模式,这就是字符簇。

比如,要建立一个表示所有元音字符的字符簇,就可以这样做:

"[AaEeIiOoUu]" :这个模式与任何元音字符匹配,但只能表示一个字符。

用特殊符号"-"可以表示一个字符的范围,如:

"[a-z]" //匹配字母a-z,即所有的小写字母
"[A-Z]" //匹配字母A-Z,即所有的大写字母
"[a-zA-Z]" //匹配所有的字母
"[0-9]" //匹配所有的数字
"[0-9\.\-]" //匹配所有的数字,以及句号和减号
"[ \f\r\t\n]" //匹配所有的白字符

同样的,这些也只匹配一个字符。

如果要匹配由一个小写字母和一位数字组成的字符串,比如"a4"、"b5"或"f1",但不是"aa4"、"b5a4" 或"f12"的话,用这个模式:

"^[a-z][0-9]$"

尽管[a-z]代表26个字母的范围,但在这里它只能与第一个字符是小写字母的字符串匹配。

我们已经知道"^"表示字符串的开头,但是当在一组方括号里使用"^"时,它表示"非"或"排除"的意思,常常用来剔除某个字符。还用前面的例子,我们要求第一个字符不能是数字: "^[^0-9][0-9]$"

这个模式与"a4"、"b5"及" 2"是匹配的,但与"12"、"66"是不匹配的。下面是几个排除特定字符的例子:

"[^a-z]" //除了小写字母以外的所有字符
"[^\\\/\^]" //除了(\)(/)(^)之外的所有字符
"[^\"\']" //除了双引号(")和单引号(')之外的所有字符

特殊字符"." (点,英文句号)在正规表达式中用来匹配除了"换行"之外的所有字符。所以模式"^.5$"与任何两个字符的、以数字5结尾和以其他非"换行"字符开头的字符串匹配。模式"."可以匹配任何字符串,除了空串和只包括一个"换行"的字符串。

PHP的正规表达式有一些内置的通用字符簇,列表如下:

字符簇
含义
"[[:alpha:]]" 任何字母
"[[:digit:]]" 任何数字
"[[:alnum:]]" 任何字母和数字
"[[:space:]]" 任何白字符
"[[:upper:]]" 任何大写字母
"[[:lower:]]" 任何小写字母
"[[:punct:]]" 任何标点符号
"[[:xdigit:]]" 任何16进制的数字,相当于[0-9a-fA-F]
如何匹配重复出现的情况?

在很多的情况下,我们可能要匹配一个单词或一组数字。一个单词有若干个字母组成,一组数字有若干个单一的数字组成。我们用跟在字符或字符簇后面的花括?quot;{}"来确定前面的内容的重复出现的次数:假设x是一个数字,那么{x}表示"前面的字符或字符簇只出现x次";一个数字加逗号,{x,}的意思是"前面的内容出现x或更多的次数";两个用逗号分隔的数字,{x,y}表示"前面的内容至少出现x次,但不超过y次"。

字符簇
含义
"^[a-zA-Z_]$" 所有的字母和下划线
"^[[:alpha:]]{3}$" 所有的3个字母的单词
"^a$" 字母a
"^a{4}$" 不是以字母a开头并且有4个字母的单词,比如Aaaa
^a{2,4}$" aa,aaa或aaaa
"^a{1,3}$" a,aa或aaa
"^a{2,}$" 包含多于两个a的字符串,比如aaa,aaaa,aaaaa
"^a{2,}" 以两个a开头的单词,如:aardvark和aaab,但apple不行
"a{2,}" 包含有两个a的单词,如:baad和aaa,但Nantucket不行
"\t{2}" 两个制表符
".{2}" 所有的两个字符

我们可以把模式扩展到更多的单词或数字:

"^[a-zA-Z0-9_]{1,}$" 所有包含一个以上的字母、数字或下划线的字符串
"^[0-9]{1,}$" 所有的正数
"^\-{0,1}[0-9]{1,}$" 所有的整数
"^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$" 所有的整数

最后一个例子我们可以这样考虑:所有以一个可选的负号(\-{0,1})开头(^)、跟着0个或更多的数字([0-9]{0,})、和一个可选的小数点(\.{0,1})再跟上0个或多个数字([0-9]{0,}),并且没有其他任何东西($)。

特殊字符"?"与"{0,1}"是相等的,它们都代表着:"0个或1个前面的内容"或"前面的内容是可选的"。所以:

"^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$"

可以简化为:

^\-?[0-9]{0,}\.?[0-9]{0,}$

特殊字符"*"与"{0,}"是相等的,它们都代表着"0个或多个前面的内容"。字符" "与{1,}是相等的,表示"1个或多个前面的内容",所以上面的4个例子可以写成:

"^[a-zA-Z0-9_] $" 所有包含一个以上的字母、数字或下划线的字符串
"^[0-9] $" 所有的正数
"^\-?[0-9] $" 所有的整数
"^\-?[0-9]*\.?[0-9]*$" 所有的小数
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP에서 인터페이스를 어떻게 생성하고 사용합니까?PHP에서 인터페이스를 어떻게 생성하고 사용합니까?Apr 30, 2025 pm 03:40 PM

이 기사는 PHP의 인터페이스를 생성, 구현 및 사용하는 방법을 설명하여 코드 구성 및 유지 관리에 대한 이점에 중점을 둡니다.

crypt ()와 password_hash ()의 차이점은 무엇입니까?crypt ()와 password_hash ()의 차이점은 무엇입니까?Apr 30, 2025 pm 03:39 PM

이 기사에서는 PHP의 암호 해싱에 대한 Crypt ()와 Password_hash ()의 차이점에 대해 논의하여 최신 웹 애플리케이션에 대한 구현, 보안 및 적합성에 중점을 둡니다.

PHP의 크로스 사이트 스크립팅 (XSS)을 어떻게 방지 할 수 있습니까?PHP의 크로스 사이트 스크립팅 (XSS)을 어떻게 방지 할 수 있습니까?Apr 30, 2025 pm 03:38 PM

기사는 입력 유효성 검사, 출력 인코딩 및 OWASP ESAPI 및 HTML 청정기와 같은 도구를 통해 PHP의 크로스 사이트 스크립팅 (XSS) 방지에 대해 논의합니다.

PHP의 자동로드 란 무엇입니까?PHP의 자동로드 란 무엇입니까?Apr 30, 2025 pm 03:37 PM

PHP의 자동로드는 필요할 때 클래스 파일을 자동으로로드하여 메모리 사용을 줄이고 코드 구성을 향상시켜 성능을 향상시킵니다. 모범 사례에는 PSR-4 사용 및 효과적으로 코드 구성이 포함됩니다.

PHP 스트림이란 무엇입니까?PHP 스트림이란 무엇입니까?Apr 30, 2025 pm 03:36 PM

PHP 스트림은 일관된 API를 통해 파일, 네트워크 소켓 및 압축 형식과 같은 자원의 처리를 통합하여 복잡성을 추상화하고 코드 유연성 및 효율성을 향상시킵니다.

PHP를 사용하여 업로드 할 수있는 파일의 최대 크기는 얼마입니까?PHP를 사용하여 업로드 할 수있는 파일의 최대 크기는 얼마입니까?Apr 30, 2025 pm 03:35 PM

이 기사에서는 PHP의 파일 업로드 크기 관리, 기본 제한 2MB 및 php.ini 설정을 수정하여이를 늘리는 방법에 중점을 둔 파일 업로드 크기 관리에 대해 설명합니다.

PHP의 무효 유형은 무엇입니까?PHP의 무효 유형은 무엇입니까?Apr 30, 2025 pm 03:34 PM

이 기사에서는 PHP 7.1에 도입 된 PHP의 무효 유형에 대해 설명하여 변수 또는 매개 변수가 지정된 유형 또는 널이 될 수 있습니다. 개선 된 가독성, 유형 안전 및 명시 적 의도와 같은 이점을 강조하고 선언하는 방법을 설명합니다.

unset ()와 unlink () 함수의 차이점은 무엇입니까?unset ()와 unlink () 함수의 차이점은 무엇입니까?Apr 30, 2025 pm 03:33 PM

이 기사에서는 Unset ()와 Unlink () 기능의 차이점에 대해 설명합니다. 프로그래밍의 목적 및 사용 사례에 중점을 둡니다. unset ()는 메모리에서 변수를 제거하고 Unlink ()는 파일 시스템에서 파일을 삭제합니다. 둘 다 Effec에 중요합니다

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기