+ -
当前位置:首页 → 问答吧 → 正则表达式的学习笔记

正则表达式的学习笔记

时间:2007-02-09

来源:互联网

正则表达式的学习笔记:

ereg('匹配','字符串')  区分大小写
eregi -- 不区分大小写的正则表达式匹配

^ 匹配首
$ 匹配尾
. 匹配任意字符

注意:在匹配过程中匹配以上符号时需要转义,例如:"\$\."

[]     括号内为任意选择其一匹配,例如:p[hop]p  php,pop,ppp等都可以(包含)
    ereg('p[^hop]p','pap')  (不包含,“^”去反的意思)

[a-zA-Z0-9]    表示大小写a到z及0到9所有字符   

|    二选一    net|com

.*     所有字符

重复操作符:

?    0个或1个          例如:ereg('a?',',')是匹配的,表示字符串中有0个或者1个a
*     0个或更多         例如:ereg('a*',',')是匹配的
+     1个或更多         例如:ereg('a+',',')是不匹配的
{n}   次数必须匹配      例如:ereg('a{2}','a,')是不匹配的,字符串中必须存在2个a
{n,m} 最少n次,最多m次  例如:ereg('a{2,3}','a,')是不匹配的,字符串中至少存在2个a,最多3个a。(但是如果        

                        你有超过3个的a,他也会认为匹配,因为他已经匹配了你的条件)
                  ereg('ab{2,3}c','abbbbc')是不匹配的,因为a和c限制了中间的b,上例的那个没有   

                        前后限制
{n,}  最少n次        例如:ereg('a{2,}','aaa')是匹配的


POSIX格式的正则表达式

[:alnum:]    表示数字字符    [0-9a-zA-Z]
[:alpha:]    表示字母    [a-zA-Z]
[:blank:]    空格和制表符    [ \t]
[:space:]    空白(包括换行,回车,制表符,空格,竖向制表符)    [\n\r\t \x0B]
[:cntrl:]    控制符        [\x01-\x1F]
[:digit:]    数字        [0-9]
[:lower:]    小写字母    [a-z]
[:upper:]    大写字母    [A-Z]
[:xdigit:]    十六进制字符    [0-9a-fA-F]
[:ascii:]    ASC2        [\x01-\x7F]

正则替换
ereg_replace('被替换','替换',字符串)
例:
<?php
$str = '这是粗体字';

$newstr = ereg_replace('\(.*)\','<b>\1</b>',$str);

echo $newstr;
//这是粗体字
?>

分隔字符串
split()
<?php
$str = 'a,b,c,d';
$arr = split(',',$str); //$arr为数组
echo '<pre>';
print_r($arr);
/*
$str = 'a,b@c%d';
$arr = split('[,@%]',$str);
*/
?>

和perl兼容的正则表达式
界定符
/pattern/
{pattern}
[pattern]
(pattern)
<pattern>
例:
<?php
preg_match('/\.(.*)\./','http://www.liuyu.com',$new);
// 转义\.  /。。。。/为perl语言
echo $new[1]; //$new为数组,liuyu
//如果提供了 matches,则其会被搜索的结果所填充。$matches[0]  将包含与整个模式匹配的文本,$matches[1]  将

包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
?>

字符类
\s    空白    [\r\n \t]
\S    非空白    [^\r\n \t]
\w    字符    [0-9A-Za-z]
\W    非字符    [^0-9A-Za-z]
\d    数字    [0-9]
\D    非数字    [^0-9]

贪婪模式:

贪婪字符   非贪婪字符
?        ??
*        *?
+        +?
{n}        {n}?
{n,m}        {n,m}?
{n,}        {n,}?

preg_match('/\.(.*)\./','http://www.liuyu.com.net',$new);
//liuyu.com
preg_match('/\.(.*?)\./','http://www.liuyu.com.net',$new);
//liuyu

非捕获 (?:)
preg_match('/(?:www)(.*)/','http://www.liuyu.com',$new);
//.liuyu.com


尾部选项:
/regexp/i    不区分大小写
/regexp/x    如果加上该修饰符,表达式中的空白字符将会被忽略,除非他已经被转义
/regexp/m    默认的正则开始"^"和结束"$"只是对于正则字符串如果在修饰符中加上"m",那么开始和结束将会指        

字符串的每一行:每一行的开头就是"^",结尾就是"$"。
/regexp/e    本修饰符仅仅对于replacement有用,代表在热placement中作为PHP代码。
/regexp/U    使用非贪婪模式
/regexp/A    如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分

preg_match('/LIUYU/i','http://www.liuyu.com',$new);
//liuyu

preg_match_all -- 进行全局正则表达式匹配

作者: boy805   发布时间: 2007-02-08

:)

作者: luzhou   发布时间: 2007-02-11

提详细的。:D

作者: zhj6500   发布时间: 2007-02-12

正则是基础。

作者: MySQL   发布时间: 2007-02-12

怎么也学不会正则,郁闷!

作者: niohe   发布时间: 2007-02-12

引用:
原帖由 niohe 于 2007-2-12 14:55 发表
怎么也学不会正则,郁闷!
你自己想复杂了
正则绝对没这么可怕

作者: jidixuelang   发布时间: 2007-02-12

学习学习!

作者: mz198424   发布时间: 2007-03-20

:L  没禁用Smilies。

作者: hotbone   发布时间: 2007-03-21

学习一下

作者: xiaojia   发布时间: 2007-03-22

顶:lol

作者: imacoo   发布时间: 2007-03-27

  顶

作者: pgx112   发布时间: 2007-03-30

非常�x�x您的分享
好看喔~~
Ec2Link Leader of Website Hosting

作者: BeeGirl033   发布时间: 2007-04-05

热门下载

更多