注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

...

 
 
 

日志

 
 

正则表达式例子汇总(from php手册)  

2017-06-02 11:13:55|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
复习了一遍令人头疼的正则表达式,特把php手册中的例子集中起来,便于以后学习。

例子如下:

1. 根据购物车中的商品Item ID,准确判断客人的原装机型号。

de style="word-wrap: break-word;" ><?php
$title = "Replacement Canon BP-511 Camcorder Battery [Item ID:3-236-523]";
if( eregi("(\[Item ID:)([0-9]+)-([0-9]+)-([0-9]+)(])",$title,$arr) ){
    echo "
de>

de style="word-wrap: break-word;"  >";
    print_r($arr);
    echo "de>
de style="word-wrap: break-word;" >";
}
?>de>


2. 匹配日期

de style="word-wrap: break-word;" ><?php
// 分隔符可以是斜线,点,或横线

$date = "04/30/1973";
list($month, $day, $year) = split ('[/.-]', $date); // 漏洞: 04/30-1973也能匹配得上

echo "Month: $month; Day: $day; Year: $year
\n"
;
?>
de>


3. 搜索单词 web

de style="word-wrap: break-word;" ><?php
if (preg_match ("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
    print "A match was found.";
} else {
    print "A match was not found.";
}
?>
de>


4. url 中取出域名

de style="word-wrap: break-word;" ><?php
// 从 URL 中取得主机名

preg_match("/^(http:\/\/)?([^\/]+)/i",
    "http://www.php.net/index.html", $matches);
$host = $matches[2];

// 从主机名中取得后面两段

preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";
// 本例执行后将输出: domain name is: php.net

?>
de>


5. 你知道下面的程序输出什么?

de style="word-wrap: break-word;" ><?php
preg_match_all ("|<[^>]+>(.*)]+>|U",
    "example:
de>

de style="word-wrap: break-word;" >this is a testde>
de style="word-wrap: break-word;" >",
    $out, PREG_PATTERN_ORDER); // 注意PREG_PATTERN_ORDER和PREG_SET_ORDER的区别

print $out[0][0].", ".$out[0][1]."\n";
print $out[1][0].", ".$out[1][1]."\n";
echo "de>
de style="word-wrap: break-word;"  >";
print_r($out);
?>de>


6. 功能: 转义正则表达式字符,此函数很有用,可以供你写正则表达式时参考

de style="word-wrap: break-word;" ><?php
$keywords = "$40 for a g3/400";
$keywords = preg_quote ($keywords, "/");
echo $keywords; // returns \$40 for a g3\/400

?>
de>


7. 看人家如何用 preg_quote() 函数实现高亮显示

de style="word-wrap: break-word;" ><?php
// 本例中,preg_quote($word) 用来使星号不在正则表达式中

// 具有特殊含义。


$textbody = "This book is *very* difficult to find.";
$word = "*very*";
$textbody = preg_replace ("/".preg_quote($word)."/",
                          "".$word.""
,
                          $textbody);
echo $textbody;
?>de>


8. 用回调函数执行正则表达式的搜索和替换

de style="word-wrap: break-word;" ><?php
  // 此文本是用于 2002 年的,

  // 现在想使其能用于 2003 年

  $text = "April fools day is 04/01/2002\n";
  $text.= "Last christmas was 12/24/2001\n";

  // 回调函数

  function next_year($matches) {
    // 通常:$matches[0] 是完整的匹配项

    // $matches[1] 是第一个括号中的子模式的匹配项

    // 以此类推

    return $matches[1].($matches[2]+1);
  }

  echo preg_replace_callback(
              "|(\d{2}/\d{2}/)(\d{4})|",
              "next_year",
              $text);

  // 结果为:

  // April fools day is 04/01/2003

  // Last christmas was 12/24/2002

?>
de>


9.  preg_replace() 中使用索引数组


de style="word-wrap: break-word;" ><?php
$string = "The quick brown fox jumped over the lazy dog.";

$patterns[0] = "/quick/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";

$replacements[2] = "bear";
$replacements[1] = "black";
$replacements[0] = "slow";

print preg_replace($patterns, $replacements, $string);

/* Output
   ======

The bear black slow jumped over the lazy dog.

*/


/* By ksorting patterns and replacements,
   we should get what we wanted. */


ksort($patterns);
ksort($replacements);

print preg_replace($patterns, $replacements, $string);

/* Output
   ======

The slow black bear jumped over the lazy dog.

*/

?>
de>


10.  HTML 转换成文本


de style="word-wrap: break-word;" ><?php
// $document 应包含一个 HTML 文档。

// 本例将去掉 HTML 标记,javascript 代码

// 和空白字符。还会将一些通用的

// HTML 实体转换成相应的文本。


$search = array ("']*?>.*?'si", // 去掉 javascript
                 "'<[\/\!]*?[^<>]*?>'si", // 去掉 HTML 标记
                 "'([\r\n])[\s]+'", // 去掉空白字符
                 "'&(quot|#34);'i", // 替换 HTML 实体
                 "'&(amp|#38);'i",
                 "'&(lt|#60);'i",
                 "'&(gt|#62);'i",
                 "'&(nbsp|#160);'i",
                 "'&(iexcl|#161);'i",
                 "'&(cent|#162);'i",
                 "'&(pound|#163);'i",
                 "'&(copy|#169);'i",
                 "'&#(\d+);'e"); // 作为 PHP 代码运行

$replace = array ("",
                  "",
                  "\\1",
                  "\"",
                  "&",
                  "<",
                  ">",
                  " ",
                  chr(161),
                  chr(162),
                  chr(163),
                  chr(169),
                  "chr(\\1)");

$text = preg_replace ($search, $replace, $document);
?>
de>

  评论这张
 
阅读(23)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017