正则的重要作用:通过正则分割、匹配、查找、替换内容;
正则的几个基本点:元字符 ,重复,字符类,分支条件,分组,反义,反向引用,零向断言,负向零宽断言,贪婪,懒惰,平衡组,递归匹配等。
原子
PREG_MATCH 和 EREG
int preg_match ( string $pattern(正则内容)
, string $subject(正则语法)
[, array &$matches
[, int $flags
= 0 [, int $offset
= 0 ]]] (结果为数组))
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>
pattern
的匹配次数。 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索。subject
直到到达结尾。 如果发生错误preg_match()返回 FALSE
。 //模式分隔符后的"i"标记这是一个大小写不敏感的搜索
$mode="/w/";
$str="adjsk66sdfszf"; echo "<hr>"; if(preg_match($mode,$str,$arr)){ echo"匹配成功".$arr[0]; }else{ echo"不成功";}
不使用贪婪时,只匹配第一个;
元字符
特殊 or 运算符号;
* 匹配前一个内容的0次或1次或多次
.匹配内容的0次或1次或多次,但不包括回车换行;
+ 一次或多次
?0次或1次
| 类似 "||" 或者 "or"; 前后任意一个匹配
^ 匹配字符串首部内容 ctrl符号,必须出现在匹配内容的首部
$ 匹配字符串尾部内容 类似上面
匹配单词边界,边界可以是空格或特殊字符
B 这两个在英文中会很好用,但是中文里不太好用;
b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
{m}
{m,}
{m,n}
() 依次放入内存中,用 1,2获取; 举例: $mode="/d{2-4}}(.*)d{1,2}\1d{1,2}/"; $str = "2016-10-17" 前面要什么,后面也用什么,因为是调用的,前面那个查出来后会存入内存。
正则运算顺序
左→右;
优先级() > * 、? 、+、{} > ^、$、 > |
模式修正符
/正则/U
常用的修饰符:
i 不区分大小写;
m 在匹配首内容或尾内容时采用多行识别匹配; 增强 ^ 和 $ 的功能。
s 将回车取消,;
x 忽略正则中的空白;
A强制从头开始匹配;
D强制$匹配尾部无任何内容
其他相关点:
该函数返回一个字符串或者数组。该字符串或数组是将 subject
中全部的 search
都被 replace
替换之后的结果。
在加工前的对象是subject,查询的条件是search,把匹配的内容,全部替换成replace的内容。
如果没有一些特殊的替换需求(比如正则表达式),你应该使用该函数替换 ereg_replace() 和 preg_replace()。
search 和 replace可以是一一对应的数组,如 $search = array{a,b,c,d} ; $replace = array{1,2,3}; 这种情况里,replace数组内值的个数少于search,d 会被替换为空" ";
如果情况为 $search = array{a,b,c,d} ; $replace = "hehe"; 则abcd都会被"hehe"替换;