首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 正则表达式问题??? [已结贴,结贴人:blqq380621262]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • blqq380621262
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-21 02:38:59 楼主
    <?php 
       
      preg_match("!(http\:\/\/?)([^\/]+)!i",  " <http://www.php.net/index.html>",  $matches); 
      $host  =  $matches[2]; 
      echo  $host; 
      print_r($matches) 
       
      ?> 
       
      结果: 
       
      www.php.net 
       
      Array 
      ( 
              [0]  =>  http://www.php.net 
              [1]  =>  http:// 
              [2]  =>  www.php.net 
      )


    ("!(http\:\/\/?)([^\/]+)!i",  里面的!i分别表示什么???在书上找不到?

    ([^\/]+)!i 这个表示什么??怎么匹配??  正则看了很多次还是很模糊,郁闷啊!!
    40  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sd5816690
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 03:04:241楼 得分:7
    没学过PHP,以下解释可能有出入

    如果和javascript的一致,i 应该表示忽略大小写,另外 g 表示匹配全部

    [^\/] 表示不是 / 的任意字符
    + 表示前面的式子至少出现一次

    那个 ! 应该是表示正则表达式结束吧(猜的)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wildlily980
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 08:11:112楼 得分:2
    !-----delimitr
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Aylazhang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:59:243楼 得分:8
    ("!(http\:\/\/?)([^\/]+)!i",  里面的!i分别表示什么???在书上找不到?
    ----- i 表示([i]gnore)忽略大小写 ,即 HTTP:// .. 的也可以匹配

    ([^\/]+)!i 这个表示什么??怎么匹配??  正则看了很多次还是很模糊,郁闷啊!!
    ----- ([^\/]+) 是一部分,而 "!"是正则模式的边界符。
    就是红色部分,!(http\:\/\/?)([^\/]+)!i
    但是前后要匹配。这里可以一般用 "/",但是应为目标串里有 http:// 之类的字符,为了避免转义,就用了 !,
    当然你还可以用 "%", "|",等,比较灵活。但是前后要匹配。

    最后,对url的解析,其实php已经有个很好用的内置函数parse_url() 了,为啥不用它呢:)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • blqq380621262
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 12:18:274楼 得分:0
    [^\/]这不是表示匹配以/开头的字符传吗?怎么返回给数组的?怎么会得到Array 
      ( 
              [0]  =>  http://www.php.net 
              [1]  =>  http:// 
              [2]  =>  www.php.net 
      )


    引用 1 楼 sd5816690 的回复:
    没学过PHP,以下解释可能有出入

    如果和javascript的一致,i 应该表示忽略大小写,另外 g 表示匹配全部

    [^\/] 表示不是 / 的任意字符
    + 表示前面的式子至少出现一次

    那个 ! 应该是表示正则表达式结束吧(猜的)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sd5816690
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 13:00:575楼 得分:11
    ^ 可以表示字符串开始,也可以表示取反
    [^\/] 就是取反

    而得到数组,是因为加了括号后分组的原因
    第一组:默认为整个表达式
    第二:!(http\:\/\/?)([^\/]+)!i
    第三:!(http\:\/\/?)([^\/]+)!i
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangbo_wb
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 13:10:346楼 得分:5
    这里的!是正则的边界符,我们一般用/作边界符,i表示不区分大小写
    ([^\/]+)可以匹配除了/之外的所有字符
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happy002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 13:12:087楼 得分:2
    学习~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • songzairan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 14:32:478楼 得分:5
    !-是开始和结束的分界符,但长用/.../来表示
    i-意思是忽略大小写...即不考虑大小写情况!

    祝LZ好运!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • blqq380621262
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 16:38:399楼 得分:0


    [size=24px] 辛苦大家了  给你们加分去~~~~~~~~~~~~···[/size]
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved