正则表达式应用实例,笔者会在随后的博文里面陆续发布其应用实例。


处理Email地址

      在用户发布的内容中,我们需要捕捉其中的email,给其增加mailto的链接。

code:

1
2
3
4
5
6
$str	= "My email is example@gmail.com";
//$newStr	= ereg_replace("([.a-zA-Z0-9]+@[.a-zA-Z0-9]+)",'<a href="mailto:\\1">\\1</a>',$str);
//$newStr	= preg_replace('/([.a-zA-Z0-9]+@[.a-zA-Z0-9]+)/','<a href="mailto:\\1">\\1</a>',$str);
//$newStr	= preg_replace('/([.a-zA-Z0-9]+@[.a-zA-Z0-9]+)/','<a href="mailto:$1">$1</a>',$str);
$newStr	= preg_replace('/([.a-zA-Z0-9]+@[.a-zA-Z0-9]+)/','<a href="mailto:\\1">\\1</a>',$str);
echo $newStr,'<hr />';

      这里用到了子表达式引用,使用\\1或者$1(应用于preg)来引用pattern中的第一个子表达式,依次类推。

扑捉img中的src

      有时我们需要抓取img中的src内容。这里使用到避免贪婪模式方法。

code:

1
2
3
4
5
6
7
$str	= '<img src="http://56hd.com/images/logo.gif" title="title" alt="images"/>';
 
preg_match('/src="(.*?)"/', $str, $match);
 
print_r($match);
 
//Array ( [0] => src="http://56hd.com/images/logo.gif" [1] => http://56hd.com/images/logo.gif )

      使用.*?中的?来实现非贪婪模式匹配。

过滤HTML文档JS脚本

      过滤危险脚本,在WEB设计中很重要。

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$script	='
<link alt="[Image]" rel="CR ICON" href="favicon.ico" />
<link rel="stylesheet" type="text/css" href="/templates/WithAD/css/common.css" />
<script type="text/javascript">
var siteUrl = "";
var siteUrl = "";
var siteUrl = "";
</script>
<script src="/include/js/ajax.js" type="text/javascript" language="javascript"></script>
<script src="/include/js/common.js" type="text/javascript" language="javascript"></script>
<link rel="stylesheet" type="text/css" href="/styles/kong/index.css" media="all" />
<script type="text/javascript" src="/templates/WithAD/images/common.js"></script>
<link rel="stylesheet" type="text/css" href="/styles/china/index.css" media="all" />
<script src="/include/js/cityxiiflash.js" type="text/javascript" language="javascript">
</script>
';
 
$patten	= '@<script [\s\S]*?</script>@i';
 
echo htmlentities(preg_replace($patten,'',$script));
</script>

      这里使用到[\s\S]等非打印字符,以及非贪婪模式匹配。\s匹配任何空白字符,\S匹配任何非空白字符。