+前导字符必须在目标对象中连续出现1次或1次以上
*前导字符必须在目标对象中连续出现0次或0次以上
?前导字符必须在目标对象中连续出现0次或1次
.匹配换行符之外的所有字符
\s匹配单个空格符,包括tab和换行符
\S与\s相反
\d匹配0-9的数字
\D与\d相反
\w匹配字母、数字、下划线
\W与\w相反
[^]在括号中表示否定
|表示“或”
()表达式分组
[x-y]x到y的范围区间
ereg
(PHP 3, PHP 4, PHP 5)
ereg -- 正则表达式匹配
说明
bool ereg ( string pattern, string string [, array regs]
)
注: 使用 Perl 兼容正则表达式语法的 preg_match() 函数通常是比 ereg()
更快的替代方案。
以区分大小写的方式在 string 中寻找与给定的正则表达式 pattern
所匹配的子串。
如果找到与 pattern
中圆括号内的子模式相匹配的子串并且函数调用给出了第三个参数
regs,则匹配项将被存入 regs 数组中。$regs[1]
包含第一个左圆括号开始的子串,$regs[2]
包含第二个子串,以此类推。$regs[0] 包含整个匹配的字符串。
注: 直到 PHP 4.1.0 为止,$regs
将被填充为正好十个单元,即使实际匹配的子串少于十个。这并不影响
ereg() 匹配更多子串的能力。如果没有找到匹配,则 $regs 不会被 ereg()
更改。
如果在 string 中找到 pattern 模式的匹配则返回
TRUE,如果没有找到匹配或出错则返回 FALSE。
if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs))
{
echo
"$regs[3].$regs[2].$regs[1]";
} else {
echo "Invalid date format:
$date";
}
?>
ereg_replace
(PHP 3, PHP 4, PHP 5)
ereg_replace -- 替换正则表达式
说明
string ereg_replace ( string pattern, string replacement, string
string )
本函数在 string 中扫描与 pattern 匹配的部分,并将其替换为
replacement。
返回替换后的字符串。(如果没有可供替换的匹配项则会返回原字符串。)
如果 pattern 包含有括号内的子串,则 replacement 可以包含形如
\\digit
的子串,这些子串将被替换为数字表示的的第几个括号内的子串;\\0
则包含了字符串的整个内容。最多可以用九个子串。括号可以嵌套,此情形下以左圆括号来计算顺序。
如果未在 string 中找到匹配项,则 string 将原样返回。
$string = "This is a test";
echo str_replace(" is", " was", $string);
echo ereg_replace("( )is", "\\1was",
$string);
echo ereg_replace("(( )is)", "\\2was",
$string);
?>
preg_match
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match -- 进行正则表达式匹配
说明
int preg_match ( string pattern, string subject [, array matches [,
int flags]] )
在 subject 字符串中搜索与 pattern
给出的正则表达式相匹配的内容。
如果提供了 matches,则其会被搜索的结果所填充。$matches[0]
将包含与整个模式匹配的文本,$matches[1]
将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
flags 可以是下列标记:
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其偏移量。本标记自
PHP 4.3.0 起可用。
flags 参数自 PHP 4.3.0 起可用。
preg_match() 返回 pattern 所匹配的次数。要么是 0
次(没有匹配)或 1 次,因为 preg_match()
在第一次匹配之后将停止搜索。preg_match_all() 则相反,会一直搜索到
subject 的结尾处。如果出错 preg_match() 返回 FALSE。
/* 模式中的 \b 表示单词的边界,因此只有独立的 "web"
单词会被匹配,
* 而不会匹配例如 "webbing" 或 "cobweb" 中的一部分
*/
if (preg_match ("/\bweb\b/i", "PHP is the web scripting language of
choice.")) {
print "A match was
found.";
} else {
print "A match was not
found.";
}
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.";
}
?>
preg_match_all
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match_all -- 进行全局正则表达式匹配
说明
int preg_match_all ( string pattern, string subject, array matches
[, int flags] )
在 subject 中搜索所有与 pattern
给出的正则表达式匹配的内容并将结果以 flags 指定的顺序放到 matches
中。
搜索到第一个匹配项之后,接下来的搜索从上一个匹配项末尾开始。
flags 可以是下列标记的组合(注意把 PREG_PATTERN_ORDER 和
PREG_SET_ORDER 合起来用没有意义):
PREG_PATTERN_ORDER
对结果排序使 $matches[0] 为全部模式匹配的数组,$matches[1]
为第一个括号中的子模式所匹配的字符串组成的数组,以此类推。
PREG_SET_ORDER
对结果排序使 $matches[0] 为第一组匹配项的数组,$matches[1]
为第二组匹配项的数组,以此类推。
PREG_OFFSET_CAPTURE
如果设定本标记,对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值,使其中的每个单元也是一个数组,其中第一项为匹配字符串,第二项为其在
subject 中的偏移量。本标记自 PHP 4.3.0 起可用。
// \\2 是一个逆向引用的例子,其在 PCRE
中的含义是
// 必须匹配正则表达式本身中第二组括号内的内容,本例中
// 就是 ([\w]+)。因为字符串在双引号中,所以需要
// 多加一个反斜线。
$html = "bold textclick
me";
preg_match_all
("/(]*>)(.*)()/", $html,
$matches);
for ($i=0; $i< count($matches[0]); $i++) {
echo "matched: ".$matches[0][$i]."\n";
echo "part 1: ".$matches[1][$i]."\n";
echo "part 2: ".$matches[3][$i]."\n";
echo "part 3: ".$matches[4][$i]."\n\n";
}
?>