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”
但是如果用在【】这个字符串集合里面则表示非的意思