正则表达式小结

匹配次数

  • 匹配一次或多次 +
  • 匹配零次或多次 *
  • \? 匹配0次或1次
  • {n} 匹配n次
  • {n,m} 匹配n到m次
  • {n,} 匹配大于n次
  • example1: 只是看下格式怎么写
$patt = `/[a-zA-Z]/{5}`
  • example2: 替换成god
$arr = 'gooood  good gooood goooooooooooooood';
$patt = '/go+d/';
print_r(preg_replace($patt,'god','$arr));

result:

god god god god
  • example3 找出5个字符的单词
$str = 'goood  good gooood goooooooooooooood';
$patt = '/\b\w{5}\b/';
preg_match($patt,$str,$res);
echo $res;

注:单词前后的\ b代表单词的开头结尾识别符。原来会遗漏掉这个用法
result

goood

或者的用法

example:找出纯数字或字母的

$arr = 'hello g34g 333 aaaa';
$patt = '/\b[a-zA-Z]+\b |\b[\d]+\b /';
preg_match_all($patt,$arr,$res);
print_f($res);

result:

333 aaa hello

贪婪和非贪婪模式

  • 贪婪模式 ,会含括所有匹配项, 正则默认
  • 非贪婪模式 , 匹配非所有匹配项
    • 格式: 在匹配次数后面加上?

贪婪模式案例

$arr = 'adfa good gsdfsdfsdfsd gsdfsdf goooood 898 gd123';
$patt = '/g.*d/';
preg_match_all($patt,$arr,$res);
print_f($res);

result:
.*含括出了 g和d中间的所有匹配

good gsdfsdfsdfsd gsdfsdf goooood 898 gd

非贪婪模式案例

$arr = 'adfa good gsdfsdfsdfsd gsdfsdf goooood 898 gd123';
$patt = '/g.*?d/';
preg_match_all($patt,$arr,$res);
print_r($res);

和贪婪只有一个?的差异,我用中文字符,以示区别。
result:

Array ( [0] => Array ( [0] => good [1] => gsd [2] => gsd [3] => goooood [4] => gd ) )

案例说明总结
非贪婪模式
找到一个从g往后找d,如果找到了直接输出,然后继续找。
贪婪模式
找一个g往后找d,找到了一个d,继续往后找,直到最后一个d,然后输出

后向引用

排除后向引用找收尾一致的单词会很麻烦 类似

// 只能找a首位一致的
$patt = '/\ba\w+a\b/';

引入后向引用概念:
第n个子括号内的子表达式后面用\n 来表示 (其他语言可能是$n)。
可以参考以下代码

$patt = '/\b(\w+).*\1\b/';

参考案例,查找首尾字母一致的单词

$str = 'massdm AsdfsdZA sdfsfs sdfsdfss1 sdf ';
$patt = '/\b([a-zA-Z]\w*\1\b)/';
preg_match_all($patt,$str,$res);
print_r($res);

再做个案例,替换手机号中间4位数

$str = '18760581322 18760581321 1876058132211';
$patt = '/\b(\d{3})\d{4}(\d{4})\b/';
echo preg_replace($patt,'\1****\2',$str);

模式

单行模式:
把整个文件当成一行,表达式末尾加上 \s

$patt = '/\b[a-z]*/s'

不区分大小写 ,表达式末尾加上 \i

$patt = '/\b[a-z]*/i'

example:

$str  = 'I Missing U Alicelock';
//$patt = '/\b[a-z]\b/';
$patt = '/\b[a-z]*\b/i';
preg_match_all($patt,$str,$res);
var_dump('$res');

result

// arr();
array(1) { [0]=> array(8) { [0]=> string(1) "I" [1]=> string(0) "" [2]=> string(7) "Missing" [3]=> string(0) "" [4]=> string(1) "U" [5]=> string(0) "" [6]=> string(9) "Alicelock" [7]=> string(0) "" } }

判断中文
把传入的字符集当做unicode编码,可以判断中文模式,
表达式尾加入 \u

未完待更….

你可能感兴趣的:(PHP)