PHP学习正则表达式 课件第2/2页

 更新时间:2008年06月15日 13:02:17   作者:  
正则表达式:用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。

    多行匹配

$rows = file('php.ini');  //将php.ini文件读到数组中

  //循环便历
  foreach($rows as $line)
  {
    if(trim($line))
    {
    //将匹配成功的参数写入数组中
    if(eregi("^([a-z0-9_.]*) *=(.*)", $line, $matches)) //循环进行多行匹配
    {
                     $options[$matches[1]] = trim($matches[2]);
           }
           unset($matches);
         }
  }

  //输出参数结果
  print_r($options);

    PCRE正则表达式
PCRE全称为Perl Compatible Regular Expression,意思是Perl兼容正则表达式。
在PCRE中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/apple/”。

    元字符(Meta-character)
元字符    说明
\A      匹配字符串串首的原子
\Z      匹配字符串串尾的原子
\b      匹配单词的边界    /\bis/  匹配头为is的字符串  /is\b/  匹配尾为is的字符串  /\bis\b/ 定界
\B      匹配除单词边界之外的任意字符  /\Bis/  匹配单词“This”中的“is”

\d    匹配一个数字;等价于[0-9]
\D    匹配除数字以外任何一个字符;等价于[^0-9]
\w    匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_]
\W    匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_]
\s    匹配一个空白字符;等价于[\f\n\r\t\v]
\S    匹配除空白字符以外任何一个字符;等价于[^\f\n\r\t\v]
\f    匹配一个换页符等价于 \x0c 或 \cL
\n    匹配一个换行符;等价于 \x0a 或 \cJ
\r    匹配一个回车符等价于\x0d 或 \cM
\t    匹配一个制表符;等价于 \x09\或\cl
\v    匹配一个垂直制表符;等价于\x0b或\ck
\oNN  匹配一个八进制数字
\xNN  匹配一个十六进制数字
\cC  匹配一个控制字符

    模式修正符(Pattern Modifiers) 
i    -可同时匹配大小写字母
M    -将字符串视为多行
S    -将字符串视为单行,换行符做普通字符看待,使“.”匹配任何字符
X    -模式中的空白忽略不计    
U    -匹配到最近的字符串
e    -将替换的字符串作为表达使用
格式:/apple/i匹配“apple”或“Apple”等,忽略大小写。    /i


    PCRE的模式单元 
//1 提取第一位的属性
/^\d{2}([\W])\d{2}\\1\d{4}$匹配“12-31-2006”、“09/27/1996”、“86 01 4321”等字符串。但上述正则表达式不匹配“12/34-5678”的格式。这是因为模式“[\W]”的结果“/”已经被存储。下个位置“\1”引用时,其匹配模式也是字符“/”。

当不需要存储匹配结果时使用非存储模式单元“(?:)” 
例如/(?:a|b|c)(D|E|F)\\1g/ 将匹配“aEEg”。在一些正则表达式中,使用非存储模式单元是必要的。否则,需要改变其后引用的顺序。上例还可以写成/(a|b|c)(C|E|F)\2g/。

    PCRE正则表达式函数
preg_match()和preg_match_all()
preg_quote()
preg_split()
preg_grep()
preg_replace()

preg_match()和preg_match_all()正则表达式的匹配 
语法格式:if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) {
        print "A match was found.";
    } else {
          print "A match was not found.";
    }

preg_quote()转义正则表达式字符
语法格式:$keywords = "$40 for a g3/400";
  $keywords = preg_quote ($keywords, "/");//转义谁 /转义符号
  echo $keywords; 

preg_split()用正则表达式分割字符串
preg_split()本函数与split函数功能一致。
语法格式:$keywords = preg_split ("/[\s,]+/", "hypertext language, programming");
  print_r($keywords);

preg_grep()返回与模式匹配的数组单元 
语法格式:$fl_array = preg_grep ("/^(\d+)?\.\d+$/", $array);

preg_replace()执行正则表达式的搜索和替换
语法格式:$string = "April 15, 2003";
  $pattern = "/(\w+) (\d+), (\d+)/i";
  $replacement = "\${1}1,\$3";
  print preg_replace($pattern, $replacement, $string);

preg_match_all()进行全局正则表达式匹配
语法格式:preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
      "<b>example: </b><div align=left>this is a test</div>",
      $out, PREG_PATTERN_ORDER);
  print $out[0][0].", ".$out[0][1]."\n";
  print $out[1][0].", ".$out[1][1]."\n";
输出结果:<b>example: </b>, <div align=left>this is a test</div> example: , this is a test
phpchana 课件
php正则表达式.rar

相关文章

最新评论