hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - PHP教程 - 正文 请牢记本站网址www.sosophp.cn

PHP POSIX正则表达式【php教程】

2019-12-04PHP教程搜搜PHP网52°c
A+ A-
1 基础知识

正则表达式是一种形貌一段文本形式的要领。到目前为止,我们前面所用到过的准确(笔墨)婚配也是一种正则表达式。比方,前面我们曾搜刮过正则表达式的术语,像"shop"和"delivery"。

在PHP中,婚配正则表达式更有点像strstr()婚配,而不像相称比较,因为是在一个字符串的某个位置(假如不指明则大概在字符串中的任何位置)婚配另一个字符串。比方,字符串"shop"婚配正则表达式"shop"。它也可以婚配正则表达式"h"、"ho",等。

除了准确婚配字符外,还可以用特别字符来指定表达式的元意(meta-meaning)。比方,运用特别字 符,可以指定一个在字符串入手下手或末端一定存在的形式,该形式的某部份大概被反复,或形式中的字符属于特定的某一范例。别的,还可以按特别字符的涌现来匹 配。接下来,我们将逐一议论这些变化。

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

可以婚配"large"、"very large"、"very very large"等。

5 子表达式计数

可以用在花括号({})中的数字表达式来指定内容许可反复的次数。可以指定一个确实的反复次数({3}示意反复3次),或许一个反复次数的局限({2,4}示意反复2~4次),或是一个开底域的反复局限({2,}示意最少要反复两次)。

比方:

(very){1,3}

示意婚配"very"、"very very"和"very very very"。

6 定位到字符串的入手下手或末端

[a-z]形式将婚配任何包括了小写字母字符的字符串。不管该字符串只要一个字符,或许在全部更长的字符串中只包括一个婚配的字符,都没有关联。

也可以肯定一个特定的子表达式是不是涌现在入手下手、末端或在两个位置都涌现。当要肯定字符串中只要要找的单词而没有其他单词涌现时,它将相称有用。

脱字标记(^)用于正则表达式的入手下手,示意子字符串必需涌现在被搜刮字符串的入手下手处,字符“$”用于正则表达式的末端,示意子字符串必需涌现在字符串的末端。

比方,以下是在字符串入手下手处婚配bob:

^bob

这个形式将婚配com涌现在字符串末端处的字符串:

com$

末了,这个形式将婚配只包括a到z之间一个字符的字符串:

^[a-z]$

7 分支

可以运用正则表达式中的一条竖线来示意一个挑选。比方,假如要婚配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正则表达式的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
PHP POSIX正则表达式【php教程】

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签: