热门技术教程

15个实用的PHP正则表达式(2)


次阅读 | 2011-09-27 | 标签:

  这个简单的函数有两个参数:第一个是你要匹配的标签,第二个是包含XML或HTML的变量,再强调下,这个真的很强大

  function get_tag( $tag, $xml ) {

  $tag = preg_quote($tag);

  preg_match_all(‘{<’.$tag.’[^>]*>(.*?)</’.$tag.’>.’}',

  $xml,

  $matches,

  PREG_PATTERN_ORDER);

  return $matches[1];

  }

  匹配具有属性值的XML或者HTML标签

  这个功能和上面的非常相似,但是它允许你匹配的标签内部有属性值,例如你可以轻松匹配 <div id=”header”>

  function get_tag( $attr, $value, $xml, $tag=null ) {

  if( is_null($tag) )

  $tag = ‘\w+’;

  else

  $tag = preg_quote($tag);

  $attr = preg_quote($attr);

  $value = preg_quote($value);

  $tag_regex = “/<(“.$tag.”)[^>]*$attr\s*=\s*”.

  “(['\"])$value\\2[^>]*>(.*?)<\/\\1>/”

  preg_match_all($tag_regex,

  $xml,

  $matches,

  PREG_PATTERN_ORDER);

  return $matches[3];

  }

  匹配十六进制颜色值

  web开发者的另一个有趣的工具,它允许你匹配和验证十六进制颜色值.

  $string = “#555555″;

  if (preg_match(‘/^#(?:(?:[a-fd]{3}){1,2})$/i’, $string)) {

  echo “example 6 successful.”;

  }

  查找页面 title

  这段代码方便查找和打印 网页 <title> 和</title> 之间的内容

  $fp = fopen(“”,”r”);

  while (!feof($fp) ){

  $page .= fgets($fp, 4096);

  }

  $titre = eregi(“<title>(.*)</title>”,$page,$regs);

  echo $regs[1];

  fclose($fp);

  解释 Apache 日志

  大多数网站使用的都是着名的Apache服务器,如果你的网站也是,那么使用PHP正则表达式解析 apache 服务器日志 怎么样?

  //Logs: Apache web server

  //Successful hits to HTML files only.  Useful for counting the number of page views.

  ‘^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+”(?:GET|POST|HEAD) ((?#file)/[^ ?"]+?.html?)??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+”s+(?#status code)200s+((?#bytes transferred)[-0-9]+)s+”((?#referrer)[^"]*)”s+”((?#user agent)[^"]*)”$’

  //Logs: Apache web server

  //404 errors only

  ‘^((?#client IP or domain name)S+)s+((?#basic authentication)S+s+S+)s+[((?#date and time)[^]]+)]s+”(?:GET|POST|HEAD) ((?#file)[^ ?"]+)??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+”s+(?#status code)404s+((?#bytes transferred)[-0-9]+)s+”((?#referrer)[^"]*)”s+”((?#user agent)[^"]*)”$’

  使用智能引号代替双引号

  如果你是一个印刷爱好者,你将喜欢这个允许用智能引号代替双引号的正则表达式,这个正则被WORDPRESS在其内容上使用

  preg_replace(‘B”b([^"x84x93x94rn]+)b”B’, ‘?1?’, $text);

  检验密码的复杂度

  这个正则表达式将检测输入的内容是否包含6个或更多字母,数字,下划线和连字符. 输入必须包含至少一个大写字母,一个小写字母和一个数字

  ‘A(?=[-_a-zA-Z0-9]*?[A-Z])(?=[-_a-zA-Z0-9]*?[a-z])(?=[-_a-zA-Z0-9]*?[0-9])[-_a-zA-Z0-9]{6,}z’

  WordPress: 使用正则获得 帖子上的图片

  我知道很多人是WORDPRESS的使用者,你可能会喜欢并且愿意使用 那些从帖子的内容检索下来的图像代码。使用这个代码在你的BLOG只需要复制下面代码到你的某个文件里

  <?php if (have_posts()) : ?>

  <?php while (have_posts()) : the_post(); ?>

  <?php

  $szPostContent = $post->post_content;

  $szSearchPattern = ‘~<img [^>]* />~’;

  // Run preg_match_all to grab all the images and save the results in $aPics

  preg_match_all( $szSearchPattern, $szPostContent, $aPics );

  // Check to see if we have at least 1 image

  $iNumberOfPics = count($aPics[0]);

  if ( $iNumberOfPics > 0 ) {

  // Now here you would do whatever you need to do with the images

  // For this example the images are just displayed

  for ( $i=0; $i < $iNumberOfPics ; $i++ ) {

  echo $aPics[0][$i];

  };

  };

  endwhile;

  endif;


上一篇:新手必读:session和cookie的区别    下一篇:世界上还需要另外一个编程语言吗?