正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。
相关推荐:
1. 正则表达式语法教程(含在线测试工具)
2. PHP正则表达式极速入门视频教程
元字符使用正则表达式具有处理能力。元字符既可以是放在[ ]
中的任意单个字符(如 [a]
表示匹配单个小写字符 a
),也可以是字符序列(如 [a-d]
表示匹配 a 、b、 c、 d
之间的任意一个字符,而 \w
表示任意英文字母和数字及下划线),常见的元字符如下:
常见的元字符
字符 | 描述 | 特别说明 |
---|---|---|
. |
匹配除换行符(\n )以外的任意字符 |
~ |
[abcde] |
匹配 a b c d e 之中的任意一个字符 |
所有字符是 或 的关系 |
[a-h] |
匹配 a 到h 之间的任意一个字符 |
~ |
[^fgh] |
不与 fgh 之中的任意一个字符匹配 |
在 中括号[ ] 的第一个字符前加上 ^ 表示 取反 不匹配中括号里面出现的任意字符 |
\w |
匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于[a-zA-Z0-9_]
|
~ |
\W |
与 \w 相反,相当于 [^a-zA-Z0-9_]
|
~ |
\s |
匹配任意的空白符,相当于 [\f\n\r\t\v]
|
~ |
\S |
与 \s 相反,相当于 [^\s]
|
~ |
\d |
匹配任何 0 到 9 之间的单个数字,相当于 [0-9]
|
~ |
\D |
与 \d 相反,相当于[^0-9]
|
~ |
[\u4e00-\u9fa5] |
匹配任意单个汉字(中文)(这里用的是 Unicode 编码表示的汉字) |
~ |
\b |
匹配单词的开始或结束 | ~ |
^ |
匹配字符串的开始 | 放在中括号的第一个字符前 则变为 取反的意思 |
$ |
匹配字符串的结束 | ~ |
正则表达式限定符
作用:限定这个符号前面 一个 单元 多出现的次数
单元:
- 如果前面出现的是一个字符的话,则这一个字符就为一个 单元
- 如果前面我们用小括号把一个很长的字符串括起来的话,那么整个小括号里面都算是一个 单元
上面的元字符都是针对单个字符匹配的,要想同时匹配多个字符的话,还需要借助限定符,下面是一些常见的限定符(下表中 n
和 m 都是表示 整数。)
字符 | 描述 | 特别说明 |
---|---|---|
* |
匹配 0 到 多 个元字符,相当于 {0,}
|
~ |
? |
匹配 0 到 1 个元字符, 相当于 {0,1}
|
~ |
+ |
匹配至少 1 个元字符,相当于 {1,}
|
~ |
{n} |
匹配 n 个元字符 | ~ |
{n,} |
匹配至少 n 个元字符 | ~ |
{n,m} |
匹配 n 到 m 个元字符 | ~ |
\b |
匹配单词边界 | ~ |
^ |
字符串必须以指定的字符开始 | ~ |
$ |
字符串必须以指定的字符结束 | ~ |
说明 - 特例
- 可以将多个元字符或者原义文本字符用括号括起来形成一个
分组
,比如^(13)[4-9]\d{8}$
表示任意以 13 开头的移动手机号码。-
abcabcabc+
表示 最后的字母c
出现 1 次或 多次; -
(abcabcabc)+
表示 整个字符串abcabcabc
出现 1 次或 多次。
-
- 可以使用
|
来表示或
的关系,例如z|j|q
表示匹配z 、j、q
之中的任意一个字母。其实等价于[zjq]
。-
ab|cd|ef
表示的是:要么是ab
、要么是cd
要么是ef
。 -
a(b|cd|e)f
表示的是:以a
开头,要么是b
、要么是cd
要么是e
,最后以f
结尾。 - 总结:
|
(或
) 的唯一边界是 小括号(( )
)
-
-
[0-9A-Z.?]
这个正则你如何理解?- 当
.
和?
出现在中括号中时,.
和?
将变为 普通字符,它就是 点 和 问号。你可以理解为[ ]
的优先级要大于. 和 ?
的优先级。 - 此正则表达式将会完全匹配字符串
?aaa.bbb
,记住这里. 和 ?
被完全当做了普通字符。
- 当
高级1 - 多选结构
多选结构其实就是元字符 |
(或)的使用。
界定范围:开头、结尾、小括号
正则 | 含义 |
---|---|
Windows98|Windows2000|WindowsXP |
匹配Windows98 或者Windows2000 或者WindowsXP
|
^Windows98|Windows2000|WindowsXP$ |
以Windows98 开头或者包含Windows2000 或者以WindowsXP结尾 注意 ^ 和$ 都包含在| 的范围内,因为| 的界限只有:开头、结尾、小括号 |
Windows(98|2000|XP) |
Windows 然后98 或者2000 或者XP
|
总结:多选结构可以包括很多字符,但不能超越 括号
的界限。
高级2 - 分组与后向引用
分组
- 我们已经了解怎么重复单个字符;
- 但如果想要重复一个字符串该怎么办?你 可以用小括号来指定子表达式(也叫做分组)。
-
(\d{1,3}\.){3}\d{1,3}
简单的 IP 地址匹配表达式 - 但是它也将匹配 256.300.888.999 这种不可能存在的 IP 地址。你能写一个更准确的正则?
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
反向引用
- 使用小括号指定一个子表达式(分组)后,匹配这个子表达式的文本可以被捕获,从而在表达式或其他程序中作进一步的处理。
- 默认情况下,每个分组会自动拥有一个组号,规则是:以分组的
左括号
为标志,从左向右,第一个分组的组号为 1 ,第二个为 2 ,依次类推。
示例:
-
\b(\w+)\b\s+\1\b
可以用来匹配重复的单词 - 匹配诸如:
where where go, tom tom happy
直白解释:
正则表达式中,前面用小括号进行划分(分组),后面把小括号匹配到的内容引用到后面来,分别用\1
、\2
等 来表示。(第一个小括号极\1
...)。如果存在 小括号嵌套小括号的情况 (\w+(.?))
记住:这个时候要以 (
为标志 从左往右 数小括号就可以了。
高级3 - 环视(零宽断言)
- 环视不匹配任何字符,只匹配文本中的 特定位置。类似于
\b
、^
、$
那样。环视不会占用字符。 - 环视分为顺序和逆序两种:
- 顺序
-
(?=exp)
位置的后面能匹配exp
。例如:(?=\d)
当前位置右边是数字。 -
(?!exp)
位置的后面不能匹配exp
。例如:(?!\d)
当前位置右边不是数字。
-
- 逆序
-
(?<=exp)
位置的前面能匹配exp
。例如:(?<=\d)
当前位置左边是数字 -
(?<!exp)
位置的前面不能匹配exp
。例如:(?!\d)
当前位置左边不是数字。
-
- 顺序
高级4 - 贪婪与懒惰
- 当正则表达式中包含能接受重复的 量词 (指定数量的代码,例如:
+
、*
、{3,12}
等)时, 通常的行为是匹配尽可能多的字符。 - 正则表达式:
a.*b
,它将会匹配最长的以a
开始,以b
结束的字符串。如果用它来搜索aabab
的话,它会匹配整个字符串aabab
,这被称为 -------贪婪匹配 - -
- 我们更需要 懒惰匹配,也就是匹配尽可能少的字符,前面给出的量词都可以被转化为 懒惰匹配模式, 只要在它后面加一个问号
?
。这样.*?
就意味着匹配任意数量的重复,但是在能使整个 匹配成功的前提下使用最少的重复。 -
a.*?b
匹配最短的,以a
开始, 以b
结束的字符串。如果把它应用于aabab
的话,它会匹配aab
和ab
。
总结:
贪婪与懒惰模式之间的区别就在于:懒惰模式 在量词
*
的后面多了一个 问号?
。
高级5 - 模式匹配的优先级
在使用正则表达式时,需要注意匹配的顺序。通常相同优先级 从左到右 进行计算,不同优先级的运算 先高后低。各种操作符的匹配顺序优先级 从高到低 如下表所示。
顺序 | 元字符 | 描述 |
---|---|---|
1 | \ |
转义字符 |
2 |
() 、(?:) 、(?=) 、[]
|
模式单元和原子表 |
3 |
* 、+ 、? 、{n} 、{n,} 、{n,m}
|
重复匹配 |
4 |
^ 、$ 、\b 、\B 、\A 、\Z
|
边界限制 |
5 | | |
模式选择 |
实例
1. 字符转义
1问:要匹配字符串 333333\$33\33333
中的 \$
正则应该怎么写?
2问:如果在 PHP 中 preg_match
函数分别用单引号和双引号的表达式来匹配上面的 \$
,怎么写?
答案:
- 表达式需要的规则是
\\\$
- 用单引号表示上面的字符串
'/\\\\\\$/'
。(为方便查看我们拆分一下为'/\\ \\ \\ $/'
) - 用双引号表示上面的字符串
"/\\\\\\\$/"
。(为方便查看我们拆分一下为"/\\ \\ \\ \$/"
) - 问什么呢?
再答:
- PHP 中单引号不转义任何字符,但是唯独转义
\
,所以我们需要 6个\
来生成表达式。 双引号除了转义
\
以外,还需要多一个\
用来转义$
所以它 需要 7 个\
。
相关教程推荐:PHP视频教程
以上是详解正则表达式的详细内容。更多信息请关注PHP中文网其他相关文章!

tomakephpapplicationsfaster,关注台词:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,关注台词:1)启用opcodeCachingwithapCutoredUcescriptexecutiontime.2)实现databasequerycachingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandredececonnection.4 limitsclection.4.4

依赖注入(DI)通过显式传递依赖关系,显着提升了PHP代码的可测试性。 1)DI解耦类与具体实现,使测试和维护更灵活。 2)三种类型中,构造函数注入明确表达依赖,保持状态一致。 3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

databasequeryOptimizationinphpinvolVolVOLVESEVERSEVERSTRATEMIESOENHANCEPERANCE.1)SELECTONLYNLYNESSERSAYCOLUMNSTORMONTOUMTOUNSOUDSATATATATATATATATATATRANSFER.3)

phpisusedforsenderemailsduetoitsbuilt-inmail()函数andsupportiveLibrariesLikePhpMailerandSwiftMailer.1)usethemail()functionforbasicemails,butithasimails.2)butithasimimitations.2)

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显着提升PHP应用的性能。

依赖性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增强量产生性,可验证性和Maintainability.itallowspasspassingDepentenciesLikEdenceSeconnectionSeconnectionStoclasseconnectionStoclasseSasasasasareTers,interitationApertatingAeseritatingEaseTestingEasingEaseTeStingEasingAndScalability。

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。