正则表达式

正则表达式

测试网址
http://www.rexv.org

1.正则表达式基础语法
完整的正则表达式由两种字符组成 特殊字符(元字符) 普通字符(文本)
/^d+hello.*/
^ d + . *都是元字符
hello是文本字符

2.常见元字符列表
.
w
s
d

^
$
xxx
xdd
uxxx

3.[-0-9A-Z.?] 元字符有哪些
. ? 不是元字符 []优先级更高

4.字符转义
test.php 匹配 test.php

5.$
单引号会转义转义符
测试:
333333$3333333
要匹配上面字符串中的 "$" 正则怎么写
在PHP中用pre_match函数分别用单引号 双引号匹配上面的$

表示式需要的规则 $
双引号 解析字符
单引号 只会解析反斜杠的转义字符
单引号表示上面的字符串 \$ (四个字符中只有两个转义需要解析)
双引号表示上面的字符串 \$ (四个字符都解析都需要转义)

<?php
$uids = '333333$3333333';
$uids2 = '333333$3333333';
$uids = preg_match_all("/\\\$/",$uids,$matchs);
$uids2 = preg_match_all('/\\$/',$uids2,$matchs2);
print_r($matchs);
print_r("<br/>");
print_r($matchs2);
?>

6.多选结构
Windows98|Windows2000|WindosXP 以W98 或者 W2000 或者 WXP
^Windows98|Windows2000|WindosXP$ 以W98开头 或者 包含Windows2000
或者 以WindowsXP结尾 都在或的范围内
结尾
Windows(98|2000|XP) W98 或者 W2000 或者 WXP
多选结构可以包括很多字符 但是不能超越括号
开头结尾或者小括号

7.分组与向后引用

8.环视(零宽断言)
实例:
(?=jeffrey)jeff 匹配jeffrey单词中的jeff
jeff(?=rey) 匹配jeffrey单词中的jeff
环视为数值添加逗号
5345678986 5345,678,986
每三位加逗号

分析:
需要找到一个位置 将位置替换为 ',' 这个位置符合以下条件
1.左边必须有数字
2.右边的的数字是3的个数
实例:

$string = '5345678986';
$pattern = '/(?<=d)(?=(d{3})+$)/';
$replacement = ',';
print_r(preg_replace($pattern,$replacement,$string));

9.贪婪非贪婪(匹配优先和忽略优先)
a.b aabab 匹配整个长度
a.
?b aabab 匹配整个aab ab

10.正则的引擎
DFA NFA引擎分类

11.回溯

12.表达式优化

  • .与(?:.)在逻辑上相等 前者速度更快 引擎做了内部优化
  • 尽量使用非捕获的括号
  • 消除不必要的字符组 [.]与.逻辑上相等 后者更快
  • 字符组优于多选结构 [abc]优于多选结构
  • 忽略有限还是匹配优先

13.PHP模式修饰符
i 大小写不敏感匹配
m 增强的行锚点模式
x 空白和#注释将被忽略
s 点号元字符匹配所有字符 包含换行符
e 将替换后的字符串作为php代码评估执行

PCRE分隔符号
/xaxsa/

asdas#

都可以

原文地址:https://www.cnblogs.com/weizaiyes/p/8135886.html