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

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”

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值