关于正则表达式的一些知识和函数总结

xiaoxiao2021-02-28  96

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”

但是如果用在【】这个字符串集合里面则表示非的意思

转载请注明原文地址: https://www.6miu.com/read-54912.html

最新回复(0)