现在用FCK上传的图片是跟文章的内容混在一起的,希望取出其中某张图片的路径存入数据库中的某个字段(要相对路径)
现在FCK获得的路径是这样的
/images/image/F200606110610522718192802.jpg  images是网站根目录底下的一个文件夹,现在就求一表达式来从FCKeditor1.Value中把这个取出来。
环境是vs 2005(vb)

解决方案 »

  1.   

    用正则就可以嘛。
    FCKeditor1.Value的值是string类型的,用正则很好提取出来的。
      

  2.   

    一般来说一个 HTML 文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想把文档中的 img 标签提取出来并不是一件容易的事。由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易。于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能会找得不全,或者找出来的不是正确的 img 标签。我们可以从 HTML 标签的格式去想应该怎么建这个正则表达式。首先要想一下 img 标签有几种写法,忽略大小写不看的话,下面列出 img 标签可能出现的几种情况。<img> <img/> <img src=/>
    这一些标签不用考虑,因为没有图片资源地址。<img src = /images/pic.jpg/ > <img src =" /images/pic.jpg" > <img src= '/images/pic.jpg ' / >这一些标签都有图片资源地址,另外还有一个特点就是有引号对,可能为单引号,也可能为双引号。因为不需要同时匹配引号对,所以正则表达式可以这么写:@"<img\s*src\s*=\s*[""']?\s*(?[^\s""'<>]*)\s*/?\s*>"<img width="320" height="240" src=/images/pic.jpg onclick="window.open('/images/pic.jpg')">因为 img 和 src 之间可能会有其他的参数,所以“<img”要有个单词结束,比如说不能是“<imgabc”,同样 src 前面也是一样,使用单词结束符“\b”有一个好处就是省去了表示空格的“\s*”。另外由于 img 标签中不可以出现“<”、“>”这样的符号,所以要改写前面的正则表达式:@"<img\b[^<>]*?\bsrc\s*=\s*[""']?\s*(?<imgUrl>[^\s""'<>]*)[^<>]*?/?\s*>"<img width="320" height="240" src = "/images/pic.jpg" />像这种可能会用回车符折行的问题有时候会出现,所以在有空格分开的地方要包含回车换行和 TAB 字符,另外在图片地址中不能出现空格、TAB、回车和换行字符。所以上面的正则表达式可以改成:@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>"下面写出取得HTML中所有图片地址的静态方法。/// <summary>
    /// 取得HTML中所有图片的 URL。
    /// </summary>
    /// <param name="sHtmlText">HTML代码</param>
    /// <returns>图片的URL列表</returns>
    public static string[] GetHtmlImageUrlList(string sHtmlText)
    {
    // 定义正则表达式用来匹配 img 标签
    Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);// 搜索匹配的字符串
    MatchCollection matches = regImg.Matches(sHtmlText);int i = 0;
    string[] sUrlList = new string[matches.Count];// 取得匹配项列表
    foreach (Match match in matches)
    sUrlList[i++] = match.Groups["imgUrl"].Value;return sUrlList;
    }该方法返回一个字符串数组,存放的就是从 sHtmlText 字符串中取得的图片地址列表。
      

  3.   

    我用的fck不能上传图片  我感觉fck不太好用  而且反应也比较慢
      

  4.   

    我用一个response.writing来输出,结果在页面是System.String[]
      

  5.   

    如果图片不是非常多的话,可以试一下这个算法把所有图片名(包括相对路径)放到一个数组里面,然后历遍数组,看看图片名在不在fck的值里面。如果在,那就保存起来这个算法性能上来说不好,但是应该很容易实现
      

  6.   

    如周公所说,从FCK.Value中用正则读取IMG的SRC值,然后分析是否属于本地,如果属于本地就存储
    这应该是非常简便的方法了
    如此贴可:
    http://topic.csdn.net/u/20081210/14/057823DD-2751-48A4-85DC-3DB28784B96A.htmlstring URL = @"((http|https):(\/\/|\\\\){1}((\w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(\S*\/)((\S)+[.]{1}(gif|jpg|jpeg|png|bmp)))"; 
    用这段可取出图片地址,我写的一个数据采集的程序就是采用这段正则解析图片地址的,很好用
      

  7.   

    Dim fckStr As String = FCKeditor1.Value
    Dim matchs As MatchCollection = Regex.Matches("", "<img\s[^> ]*src=([""']*)(?<src> [^'""]*)\1[^> ]*>", RegexOptions.IgnoreCase) 
    For Each m As Match In matchs 
        Response.Write(m.Groups("src ").Value) 
    Next 
      

  8.   

    这个fckStr定义后为什么没用到呢
      

  9.   

    现在的情况是这样报错:
    正在分析“ <img\s[^> ]*src=(["']*)(? <src> [^'"]*)\1[^> ]*>”- 无法识别的分组构造。
      

  10.   

    哎,还是得俺亲自搞定,俺最后用了个uploadfile控件,然后获取其文件名,最后“/images/image”这一部分是不变的就自己写,哎哎哎哎哎 哎
      

  11.   

    提取fck中第一个图片路径
    <?php
           $reg=”/<\s*img\s+[^>]*?src\s*=\s*(\’|\”)(.*?)\\1[^>]*?\/?\s*>/i”;
           preg_match($reg,$_POST['neirong'],$matches);
           echo “$matches[2]“;
    ?>
    这个绝对可以用