热门关键字:  PHP  Cisco  seo  网络广告 虚拟主机 中文域名
当前位置 :| 主页>编程开发>PHP>常用函数>

如何在 PHP 中使用正则表达式

来源:IBM 作者: 时间:2006-03-25 点击:

PCRE 字符类

由于 PCRE 语法支持更短的字符类和更多的特性,因此它比 POSIX 语法更为强大。表 5 列出了 PCRE 中支持而在 POSIX 表达式中没有的部分字符类。


表 5. PCRE 字符类

字符类 描述
\b 词边界,查找词的开始和结尾
\d 匹配任意数字
\s 匹配任意空白,如 tab 或空格
\t 匹配一个 tab 字符
\w 匹配包含字母与数字的字符

PCRE 匹配

PHP 中的 PCRE 匹配函数与 POSIX 匹配函数类似,但如果您习惯使用 POSIX 表达式,那么 PCRE 匹配函数的一项特性可能会使您感到棘手:PCRE 函数要求表达式以分隔符开始和结束。在绝大多数示例中,分隔符都是一个 /,可在引号内表达式的开始和结尾处看到。务必牢记,此分隔符并非表达式的一部分。

在 PCRE 中的最后一个分隔符后,您可添加一个修饰符来更改正则表达式的行为。举例来说,i 修饰符使正则表达式对大小写不敏感。这是与 POSIX 方法的一项重要差异,在 POSIX 中,您需要按照对大小写敏感性的需求来调用不同的方法。

preg_grep()

preg_grep() 方法返回一个数组,其中包含通过正则表达式在其中找到匹配项的另外一个数组的全部项目。如果您有一个较大的值集,并希望对其进行搜索以查找匹配项,那么该方法非常有用。下面是一个示例:


清单 5. preg_grep() 方法



<?php
$array = array( "1", "3", "ABC", "XYZ", "42" );
// Syntax is preg_grep( regex, inputarray );
$grep_array = preg_grep("/^\d+$/", $array);
print_r($grep_array);
?>

在本例中,正则表达式 ^\d+$ 查找行的开始(^)和结尾($)之间包含一个或多个数字(\d+)的数组的所有元素。

preg_match()

preg_match() 函数使用 PCRE 在字符串中查找匹配项,它需要两个参数:regex 和字符串。您可以选择提供一个将由匹配项填充的数组、允许您修改匹配操作行为的标志,还可提供字符串中开始查找匹配项的位置(offset)。示例如下:


清单 6. offset 方法



<?php
$string = "abcdefgh";
$regex = "/^[a-z]+$/i";
// Syntax is preg_match(regex, string, [, out_matches [, flags [, offset]]]);
if (preg_match($regex, $string)) {
    printf("Pattern '%s' found in string '%s'\n", $regex, $string);
} else {
    printf("No match found in string '%s'!\n", $string);
}
?>

本例使用了正则表达式 ^[a-z]+$,在行的开始(^)和结尾($)之间搜索可查找到一次或多次的([a-z]+)、从 az 的任意字母。

preg_match_all()

preg_match_all() 函数为在字符串中查找到的全部匹配项构建一个数组。下例构建了一个包含句子中全部词的数组:


清单 7. preg_match_all() 函数



<?php
$string = "The quick red fox jumped over the lazy brown dog";
$re = "/\b\w+\b/";
// Syntax is preg_match_all( regex, string, return_array [, flags [, offset]])
preg_match_all($re, $string, $arrayout);
print_r($arrayout);
?>

正则表达式 \b\w+\b 在词边界(\b)间查找可找到一次或多次的(\w+)单词字符。每个词都将置入输出数组 $arrayout 的一个数组元素中。


上一篇:通用控件校验函数
下一篇:没有了
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
赞助商连接