| 或运算符
表示匹配任何其中的一个。注意运算符与字符间不能含有空格,否则空格会被当成所匹配内容的一部分。
例10-4 匹配两个中的任何一个
<?php
print "匹配 you 或 me,请输入:\n";
if(NULL!=($sub=fgets(STDIN))){
$patern="/you|me/";
$n=preg_match_all($patern,$sub,$arr);
print "匹配到".$n."个\n";
print_r($arr);
}
?>
^ 运算符
一、表示不含 ^ 符号后面的字符;
二、表示以 ^ 符号后面字符开头的字符串。
例10-5 匹配不含字符A。
<?php
print "匹配非A,请输入:\n";
if(NULL!=($sub=fgets(STDIN))){
$patern="/[^A]/";
$n=preg_match_all($patern,$sub,$arr);
print "匹配到".$n."个\n";
print_r($arr);
}
?>
在上例中,^A要用方括号括起来,否则就会表示匹配以A开头的字符串。 ^ 还有另外一种作用,表示匹配以 ^ 后面的字符开头的字符串。
例10-6 匹配一个以B开头的字符串。
<?php
print "匹配以B开头。请输入:\n";
if(NULL!=($sub=fgets(STDIN))){
$patern="/^B/";
$n=preg_match($patern,$sub);
if($n) print "B开头。";
else print "不是B开头。";
}
?>
$ 修正符
表示以 $ 前字符结的字符串。
例10-7 判断一个字符串是否以 ed 结尾。
<?php
print "匹配以ed结尾。请输入:\n";
if(NULL!=(fscanf(STDIN,"%s",$sub))){
$patern="/ed$/";
$n=preg_match($patern,$sub);
if($n) print "是ed结尾。";
else print "不是ed结尾。";
}
?>
- 连接符
它只能用在方括号内,表示从 – 前面的字符到 – 后面的字符。如a-z表示从a到z。
例10-8 判断表单内容是否含有小写字母。
判断表单内容是否含有小写字母。请输入内容:
<?php
print "匹配是否含有小写字母。请输入:\n";
fscanf(STDIN,"%s",$sub);
$patern="/[a-z]/";
$n=preg_match($patern,$sub);
if($n) print "是!";
else print "否";
?>
()圆括号
表示嵌套的正则表达式。圆括号将正则表达式分层进行嵌套,使得正则表达式特别灵活。详见本章10.5节。
例10-9 判断是否含有字符串 qq 。
<?php
print "是否含有qq字符串。请输入:\n";
fscanf(STDIN,"%s",$sub);
$patern="/(qq)/";
$n=preg_match($patern,$sub);
if($n) print "是!";
else print "否";
?>
在上例中,如果输入一个qaq ,点击测试会打印出“不含!”。因为它将 qq 作为一个整体来进行匹配。’/(qq)/ ’ 与 ‘/qq/ ‘ 有些近似,但两者是有区别的,前者会把匹配内容作为一个整体,因此可以进行整体操作。
10.1.2 正则字符
正则字符通常包括普通字符、转义字符、还原字符、标记字符。
普通字符
一般的字符都可以看作普通字符,包括abcdABCD_…1234…*%#…等等。
转义字符
它是以 \ 来进行转义的,以下是最常用的转义字符:
\b 匹配一个单词边界。
\B 匹配非单词边界。
\cx 匹配由x指明的控制字符。
\f 匹配一个换页符。
\n 匹配一个换行符。
\r 匹配一个回车符。
\t 匹配一个制表符。
\v 匹配一个垂直制表符。
每个字母、每个unicode字符都可以用转义字符来表示。例如: \u00A9 匹配版权符号。关于每个字符的对应转义字符,可以到网上去查询有关资料。
例10-10 统计某一文本中有多少行。
新建立一个文本名为:test_17_10.txt 保存在当前目录下,在里面输入几行。再写PHP文本,内容如下:
<?php
$text=file_get_contents("test_17_10.txt");
$patern="/\n/";
$n=preg_match_all($patern,$text,$arr);
print $n;
?>
例10-11 将提交过来的文本中的换行符 \ n替换为网页格式的换行符<br />
<?php
print "将回车、换行替换为<br />。用q结束输入。请输入:\n";
while("q\r\n"!=($sub=fgets(STDIN))){
$patern="/\r|\n/";
print preg_replace($patern,"<br />",$sub);
}
?>
还原字符
还原字符又称使见字符(使某个特殊字符可见)。还原符是将有特殊作用的字符还原成普通字符,它通常也是以 \ 来进行还原。比如:将 / 作为定界符,当在正则内容中要匹配 / 时,要进行还原,也就是用 \ / 形式来还原定界符。
例10-12 匹配定界符。
<?php
$patern="@\@@";
$text="XXXXX";
$n=preg_match_all($patern,$text,$arr);
print $n;
?>
在上例中,当 @ 号被用作定界符时,如果它赤裸地出现在匹配内容中,会被当成定界符使用,因此程序会报错。此时如果要匹配它,必须使用还原符 \ 将 @ 号还原成普通的字符。还原字符主要应用在:
1.正则符号
2.原简符
3.\ 本身
4.定界符
例10-13 匹配正则符号
<?php
$patern="/[\)\(\]\[\^\$\-\|]/";
$text="[(1+2)*3]-15";
$n=preg_match_all($patern,$text,$arr);
print "匹配到".$n."个\n";
print_r($arr);
?>
标记字符
标记字符是已经存储在内存中的字符,用 \ 调用其编号调出其对应的字符。
例10-14 匹配一个与先前已匹配好的字符
<?php
$patern="#<(\w+)>.*</\1>#";
$text="<h1>你好,正则!</h1>";
$n=preg_match_all($patern,$text,$arr);
print $n."\n";
print_r($arr);
?>
在上例中,()括起来的正则内容,一旦被匹配,其内容被保存在内存中,在后面的可以用 \ 加上其标号1将其调出。
\w 、+ 、 . 、 * 是简化符,将在后面给予解释。
|