PCRE修饰符
i 进行大小写不敏感匹配
s 元字符.匹配所有字符,包含换行符。
m 多行匹配,正则将包含"\n" 字符的字符串当做多行,默认只会匹配第一行
x 模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略,并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略
A 约束匹配使其仅从目标字符串的开始位置搜索
D 忽略$符号
S 执行额外的分析提升匹配的速度(当一个模式需要多次使用的时候使用此修饰符)
U 使量词默认为非贪婪的,通过量词后紧跟?的方式可以使其成为贪婪的
J 允许子组重名
u 无效的目标字符串会导致preg_*函数什么都匹配不到;无效的模式字符串会导致E_WARNING 级别的错误。
正则匹配
$flags = [ // 多个参数可使用|连接
PREG_OFFSET_CAPTURE, // 将$matches结果的每一个元素变成一个由匹配的字符串和匹配字符串在$subject中的偏移量组成的数组
PREG_UNMATCHED_AS_NULL, // 未匹配的子组报告为null;否则会是空string
PREG_OFFSET_CAPTURE | PREG_UNMATCHED_AS_NULL,
];
// 从$subject指定字节位置开始搜索匹配
$offset = 0;
// 使用字符串$pattern正则匹配字符串$subject(只匹配第一个搜索到的),返回匹配次数,发生错误返回false;匹配结果将保存在数组$matches(第一个元素为匹配的文本,后续为子组匹配的文本)中
preg_match($pattern, $subject, $matches, $flag = 0, $offset = 0);
$flags = [ // 多个参数可使用|连接
PREG_PATTERN_ORDER, // $matches[0]为完整模式的所有匹配,后续为每个子组的所有匹配
PREG_SET_ORDER, // $matches[0]包含第一次匹配得到的所有匹配(包含子组),$matches[1]是包含第二次匹配到的所有匹配(包含子组)的数组,以此类推。
PREG_OFFSET_CAPTURE, // 将$matches结果的每一个元素变成一个由匹配的字符串和匹配字符串在$subject中的偏移量组成的数组
PREG_UNMATCHED_AS_NULL, // 未匹配的子组报告为null;否则会是空string
];
// 使用字符串$pattern正则匹配字符串$subject(匹配全部),返回匹配次数,发生错误返回false;匹配结果将保存在数组$matches(第一个元素为匹配的文本,后续为子组匹配的文本)中
preg_match_all($pattern, $subject, $matches, $flag = PREG_PATTERN_ORDER, $offset = 0);
$flags = [
PREG_GREP_INVERT, // 返回输入数组中与给定模式pattern不匹配的元素组成的数组
];
// 返回给定数组input中与模式字符串pattern匹配的元素组成的数组.
preg_grep($pattern, $input, $flag = 0);
正则替换
$limit = -1; //替换次数,默认-1无限
// 使用$pattern正则将$subject中匹配的部分替换为$replacement,返回替换后的结果,替换次数保存在$count中
// 如果$subject是数组,替换将在每一个数组元素上执行
// 如果$pattern是数组,数组中的每个元素都将$subject中的匹配替换为$replacement,如果$replacement为数组则一一对应,对应不上的则对应$replacement最后一个,如果$replacement为字符串将全部替换为$replacement
preg_filter($pattern, $replacement, $subject, $limit = -1, $count);
preg_replace($pattern, $replacement, $subject, $limit = -1, $count);
// 参数为匹配结果
$callback = function ($matches) {
return ''; // 返回值为字符串
};
$flags = [ // 多个参数可使用|连接
PREG_OFFSET_CAPTURE, // 将$matches结果的每一个元素变成一个由匹配的字符串和匹配字符串在$subject中的偏移量组成的数组
PREG_UNMATCHED_AS_NULL, // 未匹配的子组报告为null;否则会是空string
PREG_OFFSET_CAPTURE | PREG_UNMATCHED_AS_NULL,
];
// 使用$pattern正则将$subject中匹配的部分使用回调$callback($matchs)替换,返回替换后的结果,替换次数保存在$count中
// $pattern,$subject可以是数组,规则与preg_filter相同
preg_replace_callback($pattern, $callback, $subject, $limit = -1, $count, $flag = 0);
$pattern = [
'/替换规则/' => function ($matches) { // 参数为匹配结果
return ''; // 返回值为字符串
},
];
// 使用数组$pattern中的键(正则)将$subject中匹配的部分使用数组$pattern中的值(回调)替换,返回替换后的结果,替换次数保存在$count中
// $subject可以是数组,规则与preg_filter相同
preg_replace_callback_array($pattern, $subject, $limit = -1, $count, $flag = 0);
字符串正则转义
// 将参数$str中每个正则表达式语法中的字符前增加一个反斜线进行转义,使这些字符进行匹配
// 正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - #
// $delimiter指定的参数也将被转义
preg_quote($str, $delimiter = null);
字符串正则切割
$limit = -1; // 分割数量,默认-1不限,0和null都是不限
$flags = [ // 多个参数可使用|连接
PREG_SPLIT_NO_EMPTY, // 仅返回分隔后的非空部分
PREG_SPLIT_DELIM_CAPTURE, // 用于分隔的模式中的括号表达式将被捕获并返回
PREG_SPLIT_OFFSET_CAPTURE, // 将分割结果的每一个元素变成一个由匹配的字符串和匹配字符串在$subject中的偏移量组成的数组
];
// 使用正则$pattern将$subject分割为数组
preg_split($pattern, $subject, $limit = -1, $flag = 0);
错误信息
//返回上一次执行PCRE正则表达式的错误消息,没有发生错误时返回"No error"
preg_last_error_msg():string
//返回最后一次PCRE正则执行的错误代码
preg_last_error():int