찾다
백엔드 개발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으로 문의하세요.
Go语言正则表达式实践指南:如何匹配十六进制颜色代码Go语言正则表达式实践指南:如何匹配十六进制颜色代码Jul 13, 2023 am 10:46 AM

Go语言正则表达式实践指南:如何匹配十六进制颜色代码引言:正则表达式是一种强大且灵活的工具,用于字符串的模式匹配和查找。在Go语言中,我们可以使用内置的正则表达式包regexp来实现这些操作。本文将介绍如何使用正则表达式在Go语言中匹配十六进制颜色代码。导入正则表达式包首先,我们需要导入Go语言的正则表达式包regexp。可以在代码的开头添加如下导入语句:i

如何在 Word 中键入箭头如何在 Word 中键入箭头Apr 16, 2023 pm 11:37 PM

如何使用自动更正在 Word 中键入箭头在 Word 中键入箭头的最快方法之一是使用预定义的自动更正快捷方式。如果您键入特定的字符序列,Word 会自动将这些字符转换为箭头符号。您可以使用此方法绘制多种不同的箭头样式。要使用自动更正在 Word 中键入箭头:将光标移动到文档中要显示箭头的位置。键入以下字符组合之一:如果您不希望将您键入的内容更正为箭头符号,请按键盘上的退格键会将

如何在 Microsoft Excel 中应用上标和下标格式选项如何在 Microsoft Excel 中应用上标和下标格式选项Apr 14, 2023 pm 12:07 PM

上标是一个字符或多个字符,可以是字母或数字,您需要将其设置为略高于正常文本行。例如,如果您需要写1st,则字母st需要略高于字符1。同样,下标是一组字符或单个字符,需要设置为略低于正常文本级别。例如,当你写化学式时,你需要把数字放在正常字符行的下方。以下屏幕截图显示了上标和下标格式的一些示例。尽管这似乎是一项艰巨的任务,但实际上将上标和下标格式应用于您的文本非常简单。在本文中,我们将通过一些简单的步骤说明如何轻松地使用上标或下标格式设置文本。希望你喜欢阅读这篇文章。如何在 Excel 中应用上标

如何在 iPhone 和 Mac 上输入扩展字符,例如度数符号?如何在 iPhone 和 Mac 上输入扩展字符,例如度数符号?Apr 22, 2023 pm 02:01 PM

您的物理或数字键盘在表面上提供有限数量的字符选项。但是,有几种方法可以在iPhone、iPad和Mac上访问重音字母、特殊字符等。标准iOS键盘可让您快速访问大写和小写字母、标准数字、标点符号和字符。当然,还有很多其他角色。您可以从带有变音符号的字母到倒置的问号中进行选择。您可能无意中发现了隐藏的特殊字符。如果没有,以下是在iPhone、iPad和Mac上访问它们的方法。如何在iPhone和iPad上访问扩展字符在iPhone或iPad上获取扩展字符非常简单。在“信息”、“

PHP正则表达式实战:匹配字母和数字PHP正则表达式实战:匹配字母和数字Jun 22, 2023 pm 04:49 PM

PHP正则表达式实战:匹配字母和数字正则表达式是一种用于匹配字符串的工具,可以方便地实现字符串的搜索、替换、分割等操作。在PHP开发中,正则表达式也是一个非常有用的工具。本文将介绍如何使用PHP正则表达式来匹配字母和数字。匹配单个字符要匹配单个字符,可以使用正则表达式中的字符类。字符类用方括号[]表示,其中的字符表示可以被匹配的字符,可以使用连字符-表示范围

使用java的Character.isDigit()函数判断字符是否为数字使用java的Character.isDigit()函数判断字符是否为数字Jul 27, 2023 am 09:32 AM

使用Java的Character.isDigit()函数判断字符是否为数字字符在计算机内部以ASCII码的形式表示,每个字符都有一个对应的ASCII码。其中,数字字符0到9分别对应的ASCII码值为48到57。要判断一个字符是否为数字,可以使用Java中的Character类提供的isDigit()方法进行判断。isDigit()方法是Character类的

正确在matplotlib中显示中文字符的方法正确在matplotlib中显示中文字符的方法Jan 13, 2024 am 11:03 AM

在matplotlib中正确地显示中文字符,是很多中文用户常常遇到的问题。默认情况下,matplotlib使用的是英文字体,无法正确显示中文字符。为了解决这个问题,我们需要设置正确的中文字体,并将其应用到matplotlib中。下面是一些具体的代码示例,帮助你正确地在matplotlib中显示中文字符。首先,我们需要导入需要的库:importmatplot

如何使用Golang判断一个字符是否为字母如何使用Golang判断一个字符是否为字母Dec 23, 2023 am 11:57 AM

如何使用Golang判断一个字符是否为字母在Golang中,判断一个字符是否为字母可以通过使用Unicode包中的IsLetter函数来实现。IsLetter函数会检查给定的字符是否是一个字母。接下来,我们将详细介绍如何使用Golang编写代码来判断一个字符是否为字母。首先,你需要创建一个新的Go文件,用于编写代码。你可以将文件命名为"main.go"。代码

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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

맨티스BT

맨티스BT

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

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

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

메모장++7.3.1

메모장++7.3.1

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