正则表达式应用实例,笔者会在随后的博文里面陆续发布其应用实例。
处理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匹配任何非空白字符。