【小白笔记】PHP学习之路 (33) --正则表达式
来源:互联网 发布:上海网络测速 编辑:程序博客网 时间:2024/04/27 22:52
定界符:除了字母、数字和反斜线\以外的任何字符都可以为定界符号,比如 | |、//、{}、!!、()等等,
但是需要注意,如果没有特殊需要,我们都使用正斜线//作为正则表达式的定界符号。
原子:正则表达式中最小的单位。\d、\s或任意一个匹配字符a、b、c都是原子。
元字符:
. 匹配除换行符以外任意字符。
^ 匹配字符串开头。
$ 匹配字符串结尾。
\w 匹配字母、数组、下划线或汉字。
\d 匹配数字。
\b 匹配单词的开头或结束。
\s 匹配任意的空白符。如空格、制表符、换行符、中文全角空格。
重复:
? 重复0次或1次。
+ 重复1次或多次。
* 重复0次或多次。
{n} 重复n次。
{n,m} 重复n次到m次。
{n,} 重复n次或更多次。
字符集:
[abc] 匹配a或b或c。
[^abc] 匹配除abc以外的字符。
[0-9] 匹配一位数字。
[a-zA-Z] 匹配一个字母。
[aeiou] 匹配任意一个元音字母。
反义匹配:
\W 匹配非字母、数组、下划线或汉字。
\D 匹配非数字。
\S 匹配非空白符。
\B 匹配不是单词开头或结束的位置。
[^a] 匹配任意一个不是a的字符。
[^abc] 匹配除了abc这几个字母以外的任意字符。
分枝条件:
abc|def 匹配abc或def。分枝条件的优先级最低。
分组条件:
ab(cde){1,3}f 匹配abcdef或abcedcedf或abcdecdecdef。默认会为分组匹配结果分配序号,可通过\n或${n}引用前面第n个匹配结果。
(?<group>exp) 匹配exp并为匹配结果分配组名group,后面可以通过\k<group>引用。同(?'group')。
(?:exp) 只匹配exp而不分组。
(?#comment) 使用注释。此表达式不对匹配结果产生任何影响。
\k<group> 引用名为group的匹配组。
断言匹配:
(?=exp) 匹配后面为exp的位置。
(?<=exp) 匹配前面为exp的位置。
(?!exp) 匹配后面不是exp的位置。
(?<!exp) 匹配前面不是exp的位置。
贪婪匹配与懒惰匹配:
正则表达式进行匹配时,默认按照“尽可能多地匹配”的原则进行匹配,即如果用"\d+"来匹配"123456789",得到的结果是"123456789",而不是"1"。
如果不想使用贪婪匹配,可以使用?修饰符来使用懒惰匹配。
*? 重复任意次,但尽可能少重复。
+? 重复一次或多次,但尽可能少重复。
?? 重复0次或1次,但尽可能少重复。
{n,m}? 重复n次到m次,但尽可能少重复。
{n,}? 重复n次以上,但尽可能少地重复。
模式修正符:
i 忽略大小写(IgnoreCase)。
m 多行模式(Multiline),更改^和$的 含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在
整个字符串的开头和结尾匹配。(在此模式下,$的 精确含意是:匹配\n之前的位置以及字符串结束前的位置.)
s 单行模式(Singleline)。更改.的含义,使它与每一个字符匹配(包括换行符\n)。即使有\n,也当做单行进行匹配。
x 忽略表达式中的空格(IgnorePatternWhitespace)。忽略表达式中的非转义空白并启用由#标记的注释。
e 在进行后向引用替换后对替换后的字符串执行eval()操作,并把执行后的字符串作为处理结果。
* 本特性自PHP5.5.0起废弃,建议不要使用。
U 禁止贪婪匹配。
A 强制使^从整个字符串开始匹配。
D 强制使$作为整个字符串结尾匹配。
* 可以同时使用多个模式修正符。
其他:
\\n 后向引用第n个匹配。也可以使用${n},注意转义。
\Z 匹配字符串结尾或行尾(不受处理多行选项的影响)
\z 匹配字符串结尾(类似$,但不受处理多行选项的影响)
\A 匹配字符串开头(类似^,但不受处理多行选项的影响)
平衡/递归匹配:
(?'group')或(?<group>) 把捕获的内容命名为group,并压入堆栈(Stack)。
(?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
(?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
(?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败
例:匹配HTML嵌套的<div>标签:<div[^>]*>[^<>]*(((?'Open'<div[^>]*>)[^<>]*)+((?'-Open'</div>)[^<>]*)+)*(?(Open)(?!))</div>
PHP正则表达式操作函数:
preg_match() 查找字符串,找到返回1,否则返回0。
传递第三个参数,将结果放到数组中(匹配结果和出现的位置)。
传递第四个参数,可以获得偏移量。
第五个参数指定开始查找的位置。
preg_match_all() 匹配并将结果放到指定的数组中。参数同上。
preg_grep() 使用正则表达式匹配数组元素,以数组形式返回匹配结果,保留索引。可使用array_values()清除原索引。
如果添加第三个参数PREG_GREP_INVERT,则返回与正则不匹配的元素(反转)。
preg_split() 通过一个正则表达式分隔字符串。以数组形式返回结果。第三个参数指定分割子串数,-1、0或null都表示
不限制。指定第四个参数PREG_SPLIT_NO_EMPTY
, 返回分割后的非空部分。
指定参数PREG_SPLIT_OFFSET_CAPTURE
,返回偏移量(即匹配位置)。
* 可以同时使用多个参数,使用+连接即可。如:PREG_SPLIT_NO_EMPTY+PREG_SPLIT_OFFSET_CAPTURE。
preg_replace() 使用正则匹配并替换。作用于字符串。如果传入含多个正则表达式的数组,同时传入要替换为的数组,
则一个正则表达式对应一条替换内容。传递第四个参数指定替换次数,-1代表全部替换。第五个参数
用于统计实际替换数量。
preg_replace_callback() 与preg_replace()相似,但是可以自定义回调函数,使用回调函数处理后再替换(第二个参数)。
其他参数一样。
create_function() 创建一个匿名函数,两个字符串参数。第一个为匿名函数的参数,第二个为函数体代码。注意转义。
preg_filter() 执行一个正则表达式搜索和替换。与preg_replace()基本相同,参数一样,唯一不同的是它只返回与目标
匹配的结果,而preg_replace()返回所有的内容(无论是否匹配)。
- 【小白笔记】PHP学习之路 (33) --正则表达式
- 小白的学习笔记之正则表达式
- php学习笔记之正则表达式_1
- php学习笔记之正则表达式3
- php正则表达式学习笔记
- PHP学习笔记----正则表达式
- php正则表达式学习笔记
- PHP正则表达式学习笔记
- PHP学习笔记九之正则表达式(进阶篇)
- 学习笔记之正则表达式
- PHP学习之路六(php与正则表达式)
- PHP学习笔记:PERL兼容正则表达式
- PHP正则表达式学习笔记(一)
- PHP正则表达式学习笔记(二)
- PHP学习笔记1--正则表达式
- php学习笔记(八)正则表达式
- PHP正则表达式学习笔记1
- PHP学习笔记(五)正则表达式
- Sublime Text常用快捷键
- ArrayList LinkedList差异
- java反射机制详解 及 Method.invoke解释
- android 开启闪关灯手电筒的实现
- cocos2d-x 3.0正式版 环境搭建 (解决加载失败,未能加载XXX包)
- 【小白笔记】PHP学习之路 (33) --正则表达式
- 动态顺序栈的C语言实现!
- 考的好不好?-单例模式来解答
- ZooKeeper安装过程 .
- spring-1.0.jar下载
- 安装第三方库的神器CocoaPods
- SCI收录中国期刊一览表
- javaEE jdbc获取数据2(存储过程调用和结果集获取)
- hdu 1811 拓扑排序和并查集