PHP核心技术与最佳实践之正则表达式匹配规则

PHP核心技术与最佳实践之正则表达式匹配规则

本文介绍几种常用的匹配规则。

1.     字符组

查找数字、字母、空白很简单,因为已经有了对应这些集合的元字符,但是如果匹配没有预定义元字符的字符集合,方法很简单, 就是在方括号内列出它们。

例如:[aeiou]匹配任何一个英文元音字母,[.*?]匹配标点中的一个。注意此时方括号内的元字符失去了特殊意义。

也可以指定字符范围,例如[0-9]的含义和\d完全一致:代表一位数字;同理[a-zA-Z0-9]等同于\w;

字符组很简单,但是一定要弄清楚字符组中什么时候需要转义。

2.      转义

如果想要查找或匹配元字符本身,比如查找*、?等就出现问题:没办法指定,因为它们会被解释成别的意思。这时就需要\来取消这些字符的特殊意义。这叫转义。

在PHP中使用反斜杠(\)表示转义,\Q和\E也可以在模式中忽略正则表达式的元字符。比如:

\d +\Q.$.\E$

以上表达式先匹配一个或多个数字,紧接着一个.点号,然后一个$,再然后一个.点号,最终是字符串末尾。也就是说\Q和\E中的元字符会被作为普通字符来匹配。

3.      反义

有些时候,查找的字符不属于某个字符类,或者表达式和已知定义相反,(比如除了数字以外其他字符),这时需要用到反义。

常用反义:


常用反义


描述


\W


匹配任意不是字母、数字、下划线、汉字的字符


\S


匹配任意不是空白符的字符


\D


匹配任意非数字的字符


\B


匹配不是单词开头或结束的位置


[^x]


匹配除了x以外的任意字符

反义有一个比较明显的特征,就是和一些已知元字符相反,并且为大写形式。比如”\D”就表示非数字。

1)    不包含空白符的字符串

\S+

2)    用尖括号扩起来、以a开头的字符串:

<a[^>] +>

提示:

“^”这里是非的意思,不是开头的。如何区分?

表示开头的 ^只能用在正则表达式的最前端,而表示取反的^只能用在字符组中,即只在中括号内出现。

注意:

不要随意使用反义,因为反义无形中扩大范围,而使自己没有考虑到。

4.     分支

分支就是存在多种可能的匹配情况。

(c|h|f|to|)cat

其中括号里的表达式将视为一个整体,分支条件指有几种规则,无论满足哪一种规则都能匹配,具体方法是使用“|”方法把不同的规则分隔开。

5.     分组

重复单个字符只需直接在字符后面加上限定符,但如果想重复多个字符?

常用的分组语法:


类别


语法


描述


捕获


(exp)


匹配exp,并捕获文本到自动命名的组里


(?<name>exp)


匹配exp,并捕获文本到name的组里


(?:exp)


匹配exp,不捕获匹配的文本


零宽断言


(?=exp)


匹配exp前面的位置


(?<=exp)


匹配exp后面的位置


(?!exp)


匹配后面不是exp的位置


(?<!exp)


匹配前面不是exp的位置


注释


(?#comment)


注释,不对正则有任何影响

时间: 2024-07-28 13:51:16

PHP核心技术与最佳实践之正则表达式匹配规则的相关文章

PHP核心技术与最佳实践之正则表达式反向引用

PHP核心技术与最佳实践之正则表达式反向引用 反向引用用于重复搜索前面某个分组匹配的文本.例如:"\1"代表分组1匹配的文本: \b(\w+)\b\s+\1\b 要反向引用分组捕获的内容,可以使用"\k<word>"上个例子: \b(?<word>\w+)\b\s+\k<word>\b [示例]:UBB标签代码 UBB标签用来在论坛和留言板中代替HTML,实现一些简单的HTML效果,同时防止滥用HTML出现安全问题. 最终UBB标

PHP核心技术与最佳实践--笔记

<?php error_reporting(E_ALL); /* php 5.3引入 延迟静态绑定 */ /* php5.4引入trait,用来实现多层继承 trait Hello{} trait World{} class MyHelloWorld{ use Hello,World; } */ /* php4时代 php是不支持析构函数的*/ /* php中数组索引是字符串,但是没有使用引号,php就将其认为是一个常量,找不到在视为变量 */ /** * php中的异常必须手动 * 可以结合错

PHP核心技术与最佳实践

<PHP核心技术与最佳实践>是一本致力于为希望成为中高级PHP程序员的读者提供高效而有针对性指导的经典著作.系统归纳和深刻解读了PHP开发中的编程思想.底层原理.核心技术.开发技巧.编码规范和最佳实践.全书分为5个部分:第一部分(1-2章)从不同的角度阐述了面向对象软件设计思想的核心概念.技术和原则,分析了面向对象的特性.设计模式的理念,指出了如何设计低耦合.高可扩展性的软件,等等:第二部分(3-6章)详细讲解了PHP中正则表达式的规范和使用技巧,PHP网络编程的原理.方法.技巧和一些重要的操

温习《PHP 核心技术与最佳实践》这本书

再次看这本书,顺手提炼了一下大致目录,以便后续看见目录就知道大概讲的些什么内容 PHP 核心技术与最佳实践 1.面向对象思想的核心概念 1.1 面向对象的『形』与『本』 1.2 魔术方法的应用 1.2.1 __set和 __get 方法 PHP 的重载和Java 等语言的重载不同. Java 里,重载指一个类中可以定义参数列表不同但名字相同的多个方法.比如,Java 也有构造 函数,只要保证方法签名不一样就行:而 PHP 则在一个类中只允许有一个构造函数. PHP 提供的『重载』指动态的『创建』

PHP核心技术与最佳实践——全局浏览

难得买到并喜欢一本好书,‘PHP核心技术与最佳实践’. 几天时间,先看了个大概,总结一下整体是什么样子的,怎么看怎么学. 1.总共14章: 2.第1.2章讲PHP的OOP: 其中第一章侧重于PHP的OOP与Java等的对比,面对对象开发的概念性问题,PHP的OOP的特殊之处,并对此给出代码例子: 3.第3.4.5章对某一个基础技术应用进行详解: 第3章讲正则表达式(md,为啥我总是看了就忘,这个东西...): 第4章讲网络技术,包括HTTP协议,socket,抓包,cURL,SMTP等应用层应用

PHP核心技术与最佳实践之Hash算法

PHP核心技术与最佳实践之Hash算法 Hash表又称散列表,通过把关键字Key映射到数组中的一个位置来访问记录,以加快查找速度.这个映射函数称为Hash函数,存放记录的数组称为Hash表. 1.     Hash函数 作用是把任意长度的输入,通过Hash算法变换成固定长度的输出,该输出就是Hash值.这种转换是一种压缩映射,也就是Hash值得空间通常远小于输入的空间,不输入可能会散列成相同的输出,而不可能从Hash值来唯一的确定输入值. 一个好的hash函数应该满足以下条件:每个关键字都可以均

PHP核心技术与最佳实践之Hash表冲突

PHP核心技术与最佳实践之Hash表冲突 接着上一篇文章,测试后输出value1value2.当 $ht->insert('key12','value12'); Echo $ht ->find('key12');时, 发现输出value12value12.这是什么原因呢? 这个问题称为Hash表的冲突.由于insert的是字符串,采用的算法是将字符串的ASIIC码相加,按照此方法,冲突产生了.通过打印key12和key1的Hash值,发现他们都为8,也就说,value1和value12同时被存

PHP核心技术与最佳实践之对象的序列化

PHP核心技术与最佳实践之对象的序列化 对象是一堆数据,可以把对象存储起来,以便需要时使用,这就是对象的序列化. 所谓序列化,就是把保存在内存中的各种对象状态(属性)保存起来,并且在需要时可以还原出来.下面代码实现了把内存中的对象当前状态保存到一个文件中. $str = serialize($student); Echo $str; File_put_contents('store.txt',$str); 输出序列化后的结果: O:6:"person":2:{s:4:"nam

正则表达式 - 匹配规则

正则表达式 - 匹配规则 基本模式匹配 一切从最基本的开始.模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符.模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符.重复出现,或表示上下文.例如: ^once 这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串.例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配