php正则表达式的常用函数主要有以下几个:
1preg_match
链接参考:http://php.net/manual/zh/function.preg-match.php
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
返回:0或者1,只能匹配到第一个成功的。要匹配好多个得用preg_match_all函数
$matches 为结果,键名为0表示表达式,键名为1表示匹配到的第一个子表达式,之后以此类推
flags为PREG_OFFSET_CAPTURE
表示需要记下每一个子表达式的偏移。
offset值如果有设置,则表示,从要匹配的字符串的offset位置开始匹配
2preg_match_all
参考链接:http://php.net/manual/zh/function.preg-match-all.php
int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
返回匹配到的次数
主要是flag这个参数
eg:
$subject = "fjggdefjkhdefd"; $pattern = '/(def\w)/'; preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER); echo "<pre>"; var_dump($matches); echo "</pre>";
当flag参数为PREG_SET_ORDER(默认)
输出matches为
array(2) { [0]=> array(2) { [0]=> string(4) "defj" [1]=> string(4) "defd" } [1]=> array(2) { [0]=> string(4) "defj" [1]=> string(4) "defd" } } 当flag参数为 PREG_SET_ORDER array(2) { [0]=> array(2) { [0]=> string(4) "defj" [1]=> string(4) "defj" } [1]=> array(2) { [0]=> string(4) "defd" [1]=> string(4) "defd" } } 这个是比较适合理解的方式如果flag为PREG_OFFSET_CAPTURE则会加入偏移量
array(2) { [0]=> array(2) { [0]=> array(2) { [0]=> string(4) "defj" [1]=> int(4) } [1]=> array(2) { [0]=> string(4) "defd" [1]=> int(10) } } [1]=> array(2) { [0]=> array(2) { [0]=> string(4) "defj" [1]=> int(4) } [1]=> array(2) { [0]=> string(4) "defd" [1]=> int(10) } } } offset参数为从哪个偏移量开始匹配3 preg_replace
将使用正则匹配到的内容替换掉。
参考链接:http://php.net/manual/zh/function.preg-replace.php
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
返回替换后的字符串,如果没有找到可以替换的,则返回原来的字符串
pattern为正则,replacement为需要替换成的,subject为需要拿来做替换操作的字符串
replacement可以使用\\数字和$ 数字两种方式来匹配前面的子表达式,但是建议使用第二种,可以这样使用${1}1这样就匹配第一个子表达式然后后面加上1,不会和第11个子表达式混合。
当pattern和replacement都是数组的时候,那就按照两个数组。的位置,从pattern第一个开始,替换成replacement的第一个,如果pattern是数组,replacement不是,那么pattern里面所有的模式都会替换成replacement
$string = 'The quick brown fox jumps over the lazy dog.'; $patterns = array(); $patterns[0] = '/quick/'; $patterns[1] = '/brown/'; $patterns[2] = '/fox/'; $replacements = array(); $replacements[2] = 'bear'; $replacements[1] = 'black'; $replacements[0] = 'slow'; echo preg_replace($patterns, $replacements, $string);
输出
The bear black slow jumps over the lazy dog.
limit为每个模式可以替换的数量,默认为-1表示无限
count就是,记载完成的替换次数
4preg_replace_callback
参考链接:http://php.net/manual/zh/function.preg-replace-callback.php
和preg_replace 基本一样,不同的是,这里,将使用一个回调函数来替换匹配到的字符串
5preg_quote
将正则的一些特殊字符加上转义,暂时没有发现比较合适的应用场景,发现了再记载
6preg_split
使用正则分割字符串
array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
返回一个分割好的数组
eg:
$keywords = preg_split("/[\s,]+/", "hypertext language, programming"); print_r($keywords);
输出‘
Array( [0] => hypertext [1] => language [2] => programming)
使用空格或者逗号或者空格加逗号分割字符串(因为【】括号里面是字符串集合,所以顺序怎么样都可以)
如果指定limit,将限制分隔得到的子串最多只有limit个,返回的最后一个 子串将包含所有剩余部分
获取每一个字符串的单字符
$str = 'string'; $chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY); print_r($chars);
7关于^ 和$
匹配字符串的开始和结束,一定是开始和结束,比如"/^abs/" 可以匹配到“abs” 但是匹配不到“ asffabs”和“ abs”
但是如果用在【】这个字符串集合里面则表示非的意思