php正则表达式深入浅出.pdf

### PHP正则表达式深入浅出 #### 一、什么是正则表达式 正则表达式(Regular Expression),简称regex或regexp,是一种用于匹配字符串中字符组合的强大工具。它可以用来执行复杂的文本处理任务,比如搜索、替换以及提取数据。在PHP中,正则表达式通过一系列内置函数来支持,如`preg_match()`、`preg_replace()`等。 #### 二、不同的正则表达式引擎 正则表达式引擎是处理正则表达式的软件组件。虽然它们的基本功能相似,但不同引擎之间存在细微差别。最常见的正则表达式引擎之一是Perl兼容正则表达式(PCRE),它是PHP默认使用的引擎。其他流行的引擎包括.NET Framework中的System.Text.RegularExpressions和Java中的java.util.regex包。 - **Perl兼容正则表达式 (PCRE)**:这是PHP中最常用的正则表达式引擎,提供了丰富的功能和灵活性。 - **.NET 正则表达式**:.NET框架中的正则表达式引擎提供了一些额外的功能,如条件分支和命名捕获组。 - **Java 正则表达式**:Java的正则表达式引擎也相当强大,支持Unicode匹配等特性。 #### 三、文字符号 正则表达式的基础构建块是单个字符。例如,正则表达式`a`将匹配字符串中首次出现的字母"a"。为了匹配特定的字符组合,可以使用多个字符。例如,正则表达式`cat`将匹配字符串"About cats and dogs"中的"cat"。 ##### 特殊字符 在正则表达式中有11个特殊字符(元字符),它们具有特殊的含义而不是简单的文本匹配: - `[]`:字符集 - `\`:转义字符 - `^`:起始锚点 - `$`:结束锚点 - `.`:任何单个字符 - `|`:选择符(或运算) - `?`:零次或一次匹配 - `*`:零次或多次匹配 - `+`:一次或多次匹配 - `()`:分组 如果希望这些字符作为普通字符匹配,则需要用反斜杠`\`进行转义。 ##### 不可显示字符 正则表达式支持匹配不可显示字符,如Tab、回车和换行符: - `\t`:Tab键(ASCII值0x09) - `\r`:回车符(ASCII值0x0D) - `\n`:换行符(ASCII值0x0A) #### 四、正则表达式引擎的内部工作机制 理解正则表达式引擎的工作原理对于优化性能和避免陷阱非常重要。主要有两种类型的引擎:文本导向的引擎和正则导向的引擎。 - **文本导向的引擎**(Deterministic Finite Automata, DFA):这类引擎从左至右扫描文本,尝试与正则表达式匹配。一旦找到匹配,就不会再继续寻找其他可能的匹配。这种引擎适合简单的正则表达式。 - **正则导向的引擎**(Non-deterministic Finite Automata, NFA):这类引擎会尝试所有可能的匹配路径。如果一个部分不匹配,它会回溯并尝试其他路径。这种引擎虽然更灵活,但在处理复杂正则表达式时可能会导致性能问题。 #### 五、字符集 字符集允许你指定一组字符中的任意一个字符。例如,正则表达式`[abc]`将匹配"a"、"b"或"c"。你可以使用连字符`-`来指定一个范围,如`[a-z]`将匹配任何小写字母。 #### 六、使用?*或+进行重复 - `?`:表示前面的字符或组可以出现0次或1次。 - `*`:表示前面的字符或组可以出现0次或多次。 - `+`:表示前面的字符或组至少出现1次。 #### 七、使用“.”匹配几乎任意字符 `.`是一个特殊的字符,它匹配除换行符之外的任何单个字符。如果你想要匹配换行符,需要使用相应的选项或方法。 #### 八、字符串开始和结束的锚定 - `^`:表示字符串的开始位置。 - `$`:表示字符串的结束位置。 例如,正则表达式`^Hello`将仅匹配以"Hello"开头的字符串。 #### 九、单词边界 单词边界是由`\b`表示的,用于匹配单词的边界。例如,正则表达式`\bthe\b`将匹配独立的单词"the"。 #### 十、选择符 选择符(`|`)用于匹配多个选项中的任意一个。例如,正则表达式`cat|dog`将匹配"cat"或"dog"。 #### 十一、组与向后引用 - 分组使用圆括号`()`,可以帮助你组织正则表达式中的元素,并且可以通过索引引用这些组。 - 向后引用使用`\1`、`\2`等表示,用于引用之前定义的组。 #### 十二、正则表达式的匹配模式 正则表达式支持多种匹配模式,如全局匹配、多行匹配等。这些模式通常通过标志位来设置,如`i`表示忽略大小写,`m`表示多行模式。 #### 十三、原子组与防止回溯 原子组是一种特殊的构造,用于优化性能并防止不必要的回溯。例如,`(?>...)`是一个非捕获的原子组。 #### 十四、向前查看与向后查看 - **向前查看**(`(?=...)`):用于检查当前位置之后的文本是否匹配指定的正则表达式,但不实际消耗这些字符。 - **向后查看**(`(?<=...)`):用于检查当前位置之前的文本是否匹配指定的正则表达式,同样不实际消耗这些字符。 #### 十五、正则表达式中的条件测试 条件测试允许基于前一个组的匹配情况决定后续的匹配行为。例如,`(?i:abc)`表示如果前一个组匹配成功,则接下来的匹配忽略大小写。 #### 十六、为正则表达式添加注释 在正则表达式中添加注释可以帮助他人更好地理解其逻辑。在PHP中,可以通过添加`#`来开始注释,如`(?: # 这是一个注释 )`。 正则表达式是处理文本的强大工具,了解其基础知识对于进行高效的文本操作至关重要。通过学习本文介绍的内容,你将能够更加熟练地使用正则表达式进行文本处理。






















剩余14页未读,继续阅读

- zoulianghao2012-11-26挺实用的,支持
- Landy2013-06-27哎,这个资料刚好自己有,不过还是谢谢楼主

- 粉丝: 8
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 职业院校计算机科学与技术专业课程优化与整合.docx
- FV资料大全FBRC语言学生成绩管理.doc
- 电气自动化工程及其节能设计的应用.docx
- 电子商务对物流管理的影响.doc
- 依托社交网络载体的高校思政教育工作创新路径研究.docx
- 课程设计模板《数据库需求分析与规划》.doc
- 单片机课程实施方案单片机数字音乐盒实施方案.doc
- Docker和微服务技术的崛起.docx
- 大数据背景下初中课外阅读行动指导策略研究.docx
- 试论企业信息化建设与ERP的实施.docx
- 计算机校验和程序.doc
- 浙大远程教育计算机基础3.Word知识题.doc
- C语言项目windows编程.docx
- 探究云计算带给高校计算机专业教学的思考.docx
- GIS-10-第十一章-空间数据表现与地图制图.ppt
- 主要资产项目管理内部控制流程在事业单位中的探讨.doc


