0

0

PHP—PCRE正则表达式转义序列(反斜线)

伊谢尔伦

伊谢尔伦

发布时间:2016-11-21 17:26:38

|

1682人浏览过

|

来源于php中文网

原创

反斜线有多种用法。首先,如果紧接着是一个非字母数字字符,表明取消 该字符所代表的特殊涵义。这种将反斜线作为转义字符的用法在字符类 内部和外部都可用。

比如,如果你希望匹配一个 "*" 字符,就需要在模式中写为 "*"。 这适用于一个字符在不进行转义会有特殊含义的情况下。 但是, 对于非数字字母的字符,总是在需要其进行原文匹配的时候在它前面增加一个反斜线, 来声明它代表自己,这是安全的。如果要匹配一个反斜线,那么在模式中使用 ”\”。

Note:

反斜线在单引号字符串和双引号字符串 中都有特殊含义,因此要匹配一个反斜线, 模式中必须写为 ”\\”。 译注: “/\/”, 首先它作为字符串,反斜线会进行转义, 那么转义后的结果是//,这个才是正则表达式引擎拿到的模式, 而正则表达式引擎也认为 是转义标记,它会将分隔符 / 进行转义, 从而得到的是一个错误,因此,需要 4 个反斜线才可以匹配一个反斜线。

如果一个模式被使用 PCRE_EXTENDED 选项编译, 模式中的空白字符(除了字符类中的)和未转义的#到行末的所有字符都会被忽略。 要在这种情况下使用空白字符或者#,就需要对其进行转义。

立即学习PHP免费学习笔记(深入)”;

反斜线的第二种用途提供了一种对非打印字符进行可见编码的控制手段。 除了二进制的 0 会终结一个模式外,并不会严格的限制非打印字符(自身)的出现, 但是当一个模式以文本编辑器的方式编辑准备的时候, 使用下面的转义序列相比使用二进制字符会更加容易。



响铃字符(十六进制 07)

cx

"control-x",x 是任意字符

e

转义 (十六进制 1B)

换页 (十六进制 0C)

换行 (十六进制 0A)

p{xx}

一个符合 xx 属性的字符

P{xx}

一个不符合xx属性的字符

回车 (十六进制 0D)

水平制表符 (十六进制 09)

xhh

hh十六进制编码的字符

ddd

ddd八进制编码的字符,或者后向引用

cx的确切效果如下: 如果x是一个小写字母,它被转换为大写。接着, 将字符的第6位(十六进制 40,右数第一个位为第0位)取反。 比如cz成为十六进制的1A,c{成为十六进制3B, c;成为十六进制7B。

在”x”后面,读取两个十六进制数(字母可以是大写或小写)。 在UTF-8模式, “x{…}”允许使用, 花括号内的内容是十六进制有效数字。 它将给出的十六进制数字解释为 UTF-8 字符代码。原来的十六进制转义序列, xhh, 匹配一个双字节的UTF-8字符,如果它的值大于127

在””之后, 读取两个八进制数。所有情况下,如果数少于2个,则直接使用。 序列 ”x” 指定了两个二进制 0 紧跟着一个 BEL 字符。 请确保初始的 0 之后的两个数字是合法的八进制数。

处理一个反斜线紧跟着的不是0的数字的情况比较复杂。在字符类外部, PCRE 读取它并以十进制读取紧随其后的数字。 如果数值小于 10, 或者之前捕获到了该数字能够代表的左括号(子组), 整个数字序列被认为是后向引用。后向引用如何工作在后面描述, 接下来就会讨论括号子组。

在一个字符类里面,或者十进制数大于 9 并且没有那么多的子组被捕获, PCRE 重新读取反斜线后的第三个 8 进制数字,并且从最低的 8 位生成单字节值。 任何的后续数字都代表它们自身。例如:

空格的另外一种用法

当提供了少于40个子组时也认为是空格。



始终是后向引用

可能是后向引用,也可能是制表符

总是一个制表符

3

一个制表符紧跟着一个3(因为每次最多只读取3个8进制位

K

八进制113代表的字符

7

Vozo
Vozo

Vozo是一款强大的AI视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。

下载

8进制377是10进制255, 因此代表一个全1的字符

81

一个后向引用或者一个二进制 0 紧跟着两个数字 8 和 1(因为8不是8进制有效数字)

注意,八进制值的 100 或者更大的值必须没有前置的0引导, 因为每次最多读取3个8进制位.

所有序列定义的单字节值都可以在字符类内部或外部使用。另外,在字符类中, 序列 ”” 解释为退格字符。字符类外它又有不同的意义(下面有描述)

反斜线的第三种用法是用来描述特定的字符类:

d

任意十进制数字

D

任意非十进制数字

h

任意水平空白字符(since PHP 5.2.4)

H

任意非水平空白字符(since PHP 5.2.4)

s

任意空白字符

S

任意非空白字符

任意垂直空白字符(since PHP 5.2.4)

V

任意非垂直空白字符(since PHP 5.2.4)

w

任意单词字符

W

任意非单词字符

上面每一对转义序列都代表了完整字符集中两个不相交的部分, 任意字符一定会匹配其中一个,同时一定不会匹配另外一个。

单词字符指的是任意字母、数字、下划线。 也就是说任意可以组成perl单词的字符。 字母和数字的定义通过PCRE字符表控制,可以通过指定地域设置使其匹配改变。比如, 在法国 (fr) 地域设置中,一些超过 128 的字符代码被用于重音字母, 它们可以实用 w 匹配。

这些字符类序列在字符类内部或外部都可以出现。 他们每次匹配所代表的字符类型中的一个字符。 如果当前匹配点位于目标字符串末尾, 它们中的所有字符都匹配失败, 因为没有字符让它们匹配了。

反斜线的第四种用法是一些简单的断言。 一个断言指定一个必须在特定位置匹配的条件, 它们不会从目标字符串中消耗任何字符。 接下来我们会讨论使用子组的更加复杂的断言。 反斜线断言包括:



单词边界

B

非单词边界

A

目标的开始位置(独立于多行模式)

Z

目标的结束位置或结束处的换行符(独立于多行模式)

z

目标的结束位置(独立于多行模式)

G

在目标中首次匹配位置

这些断言不能出现在字符类中(但是注意, “”在字符类中有不同的意义, 表示的是退格(backspace)字符)

一个单词边界表示的是在目标字符串中, 当前字符和前一个字符不同时匹配w或W(一个比配w, 一个匹配W), 或者作为字符串开始或结尾字符的时候当前字符匹配w。

A, Z, z断言不同于传统的^和$(详见下文), 因为他们永远匹配目标字符串的开始和结尾,而不会受模式修饰符的限制。 它们不受PCRE_MULTILINE,PCRE_DOLLAR_ENDONLY选项的影响。 Z 和 z 之间的不同在于当字符串结束字符时换行符时 Z 会将其看做字符串结尾匹配, 而 z 只匹配字符串结尾。

G 断言在指定了$offset 参数的 preg_match() 调用中, 仅在当前匹配位置在匹配开始点的时候才是成功的。 当$offset 的值不为 0 的时候, 它与 A 是不同的。 译注:另外一点与 A 的不同之处在于使用 preg_match_all() 时, 每次匹配 G 只是断言是否是匹配结果的开始位置, 而 A 断言的则是匹配结果的开始位置是否在目标字符串开始位置。

自 PHP 4.3.3开始, Q 和 E 可以用于在模式中忽略正则表达式元字符。比如: w+Q.$.E$ 会匹配一个或多个单词字符,紧接着一个点号,一个$,一个点号, 最后锚向字符串末尾。

自 PHP 5.2.4 开始。 K 可以用于重置匹配。 比如, footKbar 匹配”footbar”。 但是得到的匹配结果是 ”bar”。但是,K 的使用不会干预到子组内的内容, 比如 (foot)Kbar 匹配 ”footbar”,第一个子组内的结果仍然会是 ”foo”。译注: K 放在子组和子组外面的效果是一样的。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

2

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

24

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

80

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

187

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

339

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

116

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

180

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

31

2026.03.03

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

81

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号