PHP学习之正则表达式

  现在我们大家所说的正则表达式基本上是指兼容Perl风格的正则表达式。POSIX风格的正则表达式基本上没人使用了,所以从PHP5.3起,已经不推荐使用了,可能到PHP的下一个版本就会把相关的函数删除。

  关于正则表达式,因为太复杂,所以以后想专看一本正则的书,所以只介绍兼容Perl风格的正则表达式的一些函数。

  1. 定界符

  定界符表示正则表达式的开始和结尾,一般用斜线(/)表示。在PHP中(其它语言暂时没有测试过),它也可以用其它的非数字字母的字符来代替。如/\d+/和#\d+#的表示同一个正则表达式\d+。同时,也可以用小括号对,中括号对,大括号对做为定界符,如[\d+]。

  2. 函数

  匹配函数:preg_match(); 以及preg_match_all();

  替换函数:preg_replace();

  拆分函数:preg_split();

  过滤函数:preg_grep();

  示例代码:

  

复制代码 代码如下:

  $a = <<< TEXT

  aaaaaaa 15

  bbbbbbb 16

  TEXT;

  $ret = preg_match(/(\w+) (\d+)/, $a, $match);

  // $ret : 1

  // $match : array(aaaaaaa 15′, aaaaaaa, 15′)

  $ret = preg_match_all(/(\w+) (\d+)/, $a, $match);

  // $ret : 2

  // $match : array(

  // array(aaaaaaa 15′, bbbbbbb 16′),

  // array(bbbbbbb, bbbbbbb),

  // array(15′, 16′),

  // )

  $ret = preg_match_all(/(\w+) (\d+)/, $a, $match, PREG_SET_ORDER);

  // $ret : 2

  // $match : array(

  // array(aaaaaaa 15′, bbbbbbb, 15′),

  // array(bbbbbbb 16′, bbbbbbb, 16′),

  // )

  $b = preg_replace(/(\w+) (\d+)/, \1, \2′, $a);

  // $b : aaaaaaa, 15

  // bbbbbbb, 16′

  $c = preg_split(/\s/, $a);

  // $c : array(aaaaaaa, 15′, bbbbbbb, 16′)

  $files = array(aa.txt, bb.xls, cc.txt);

  $txtFiles = preg_grep(/.*\.txt/, $files);

  // $txtFiles : array(aa.txt, cc.txt)

  参考资料:

  PHP程序设计,2003,第四章 字符串,正则表达式