Twitter Subscribe to PHP Blog RSS Feed Email RSS

PHP 正则表达式应用

添加评论 2010年9月19日
可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明

正则表达式是一个比较实用的开发工具,主要用来处理复杂的字符串,如按要求替换字符串,验证Email有效性,验证密码强度,替换掉用户输入的特殊字符等等。正则表达式的基本语法请移步 Wiki

在一段文本里高亮显示指定单词

搜索并高亮显示一个特殊的单词可以应用于显示搜索结果,将搜索关键字突出,便于用户查阅。

[code lang=”php”]

$text = “Sample sentence from KomunitasWeb, regex regex has has become popular in web programming. Now we learn regex. According to wikipedia, Regular expressions (abbreviated as regex or regexp, with plural forms regexes, regexps, or regexen) are written in a formal language that can be interpreted by a regular expression processor”;
$text = preg_replace(“/\b(regex)\b/i”, ‘\\1‘,$text);
echo $text;

[/code]WhyTo:单词 regex 左右的 \b 用来确定单词边界,\1 反引第一个成功匹配的子串

将指定文本内的 URL 替换为超链接

使用正则表达式带搜索替换功能的函数来实现,自动将文本内的 URL 地址替换为超链接。

[code lang=”php”]

$text = “This is a link to http://www.example.com ,you can get tools from http://go-example.com/tools/ & ftp://example.com/p123.”;

// POSIX
echo ereg_replace(“(http|https|ftp)://([a-zA-Z0-9./-]+)([a-zA-Z0-9/]+)”, “\\0“, $text).”
“;

// Perl
echo preg_replace(“/(http|https|ftp):\/\/([a-zA-Z0-9.\/-]+)([a-zA-Z0-9\/]+)/”, “\\0“, $text);

[/code]

WhyTo:URL 均已 http(s)、ftp 开头, 后面部分包含字母数字、英文句号(.)、短线(-)和斜线(/),原本第二个小括号内本可以完成匹配,但考虑到如果URL后紧跟一个英文句号(.),就会将它匹配到超链接中,因此使用第三个小括号的部分来将URL尾部的英文句号排除。 \0 引用整个字符串。

验证密码强度

密码强度要求:

  • 至少8个字符
  • 必须同时包含至少1个大小写字母
  • 至少包含1个数字或者特殊字符

[code lang=”php”]

$passwd = “aAbcd e1c”;
if (preg_match(“/(?=^.{8,}$)((?=.*\d)|(?=.*[^a-zA-Z0-9]+))(?!.*\n)(?=.*[A-Z])(?=.*[a-z]).*$/”, $passwd))
print “Passwords is very Good!”;
else
print “The passwords is too weak or not allowed!”;

[/code]

WhyTo:“^.{8,}$”用来限定至少8个字符;(?=.*\d)|(?=.*[^a-zA-Z0-9]+) 用来指定必须包含至少1个数字或者1个特殊字符;(?!.*\n) 限定密码内不能有换行符(我估计只有密码不是接受标准输入而是从字符串或文件获取才会出现此情况);(?=.*[A-Z]) 指出必须包含大写字母;(?=.*[a-z]) 指出必须包含小写字母。

正则表达式的应用广泛,写法各异,但最终以简洁准确为依据,重要的一点是,如果可以使用其他可替代的字符串函数进行处理,尽量减少正则表达式的使用,因为正则表达式会降低代码速度。

评论

  1. ty

    东西很不错,感谢分享