下面的代码,是我的半成品,离想要的结果差一点点,可以直接拷贝运行看结果,如下: public static void main(String[] args)
{
String str1 = "<img src=\"http://www/1.jpg\" />";
String str2 = "<img src=http://www/2.jpg />";
String str3 = "<img src=   \"http://www/3.jpg\" />";
String str4 = "<img src=   http://www/4.jpg />";

String str5 = "<img src=\"5http://www/5.jpg\" />";
String str6 = "<img src=6http://www/6.jpg />";
String str7 = "<img src=   \"7http://www/7.jpg\" />";
String str8 = "<img src=   8http://www/8.jpg />";

String regex = "<img[^>]+?src=((?!http://)[^>]*?)[/]?(\\w+\\.\\w+)[\"]?\\s[^>]*?>";//找src值不为http://的路径

String str = str1+ str2 + str3 + str4 + str5 + str6 + str7 + str8;

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher(str); 

while (matcher.find())
{        
System.out.println(matcher.group(1));
//想要求得的结果为:
//5http://www
//6http://www
//7http://www
//8http://www
}
}当然主要是在这里改了:String regex = "<img[^>]+?src=这里如何写((?!http://)[^>]*?)[/]?(\\w+\\.\\w+)[\"]?\\s[^>]*?>";
应该是在红色字体处写的,如果是单一的情况,我都可以写出来,但8种情况通用的要如何写呢?
很多人可能会写成这样的:\\s*[\"]?    但很可惜,这个依然没得到我想要的结果,真不如如何写了,各位大侠帮忙结果下吧,最好要运行下,出结果吧,先谢了.

解决方案 »

  1.   

    有这么麻烦嘛?
    String regex = "src=\\s*\"?(\\d+http://www)";//找src值不为http://的路径
      

  2.   


    没那么简单的啊,你这里用到了\\d就不对了,我在str5,str6,str7,str8中使用5678,只是为了表示,后四个并非http://打头的src值,如:aaahsd,adsf,343,等等都行,总之,非http://即可,个人觉得使用这句:?!http://是少不了的.
    望有兴趣既然研究下,应该真没那么简单啊,但还是很感谢你的参与.
      

  3.   

    这样呢?
     String regex = "src=\\s*\"?+(\\S+http://www)";
      

  4.   


    “路径”一词颇有迷惑性,我在你前面那个帖子中也说过了。如果真是那些 .jpg 的路径,那么下面的代码基本上可以满足你的要求。不过下面的代码中原字符串最后的那两行,也就是 9、10,具体怎么处理你自己看着办吧。import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class HtmlImgRegex {    public static void main(String[] args) {
            String str = "<img src=\"http://www/1.jpg\" />\n" +
                         "<img src=http://www/2.jpg />\n" +
                         "<img src=   \"http://www/3.jpg\" />\n" +
                         "<img src=   http://www/4.jpg />\n" +
                         "<img src=\"5http://www/5.jpg\" />\n" +
                         "<img src=6http://www/6.jpg />\n" +
                         "<img src=   \"7http://www/7.jpg\" />\n" +
                         "<img SRC=   8http://www/a/b/8.jpg />\n" +
                         "<img src=   9http://www/a/b/8 />\n" +
                         "<img src=   10 http://www/a/b/8/ />";        String regex = "(?i)<img[^>]+src\\s*=\\s*\"?\\s*((?!http://)[^\">\\s]*)/\\w+\\.\\w+\"?\\s*/?>";        Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(str);
            while (matcher.find()) {
                System.out.println(matcher.group(1));
            }
        }
    }
      

  5.   

    我觉的你程序不是可以筛出来嘛,
    (带空格的和带"的http://貌似也被筛出来)
       "http://www
       http://www
    "5http://www
    6http://www
       "7http://www
       8http://www
      

  6.   

    无聊,试了下,结果这样如下:
    String regex = "src=\\s*\"?+(\\S+http://www)";
    输出:
    5http://www
    6http://www
    7http://www
    8http://www
      

  7.   

    还是果子哥强啊,关于9与10,由于路径不带文件名,可以不用找出来,你这个代码应该可以用的.
    但有个我不知道是什么作用,(?i)这个分组不是很明白干吗用的,这个?与i具体什么意思,能解释下吗?
    如果少了(?i)这个,第八个就找不出来了,很怪.
    再次感谢果子歌啦
      

  8.   

    不对,你还是没真正理解我的意思啊,我把第五个改为:String str5 = "<img src=\"55555//www/5.jpg\" />";
    就找不出来了呀
      

  9.   

    找到img标签中,src的值,非http://开头的路径(不含文件名,若无文件名的路径,则不用找)
    由于src的值,有可能没有引号",还可能有空格,所以就变复杂了些了. src =  aaa/bb/a.jpg,与src= "aaa/bb/a.jpg"   认为这两个src值为一样的,它们都是aaa为开头的.
    src = bc/a.jpg 与src = abc/a.jpg,前者为bc开头,后者为abc开头,空格不能算,即不能认为是" bc"打头的.
      

  10.   


    (?i) 表示不区分大小写匹配。详见这个帖子:http://topic.csdn.net/u/20080627/14/8a91b33a-f35c-4303-85b5-e0a8da462202.html下面这些是原来在 CSDN 回复过关于正则表达式的帖子,整理了一下,有兴趣的话可以去看看。[替换] http://topic.csdn.net/u/20090430/10/d14b164e-f6aa-46fc-a408-f50ddc95aa35.html  正则如何实现此功能?
    将 XML 标签中的属性换位[替换] http://topic.csdn.net/u/20090222/16/dc113ccf-0442-4bbf-bd17-3b241594b993.html  使用正则表达式进行过滤
    涉及一些动态组合正则表达式进行替换[综合] http://topic.csdn.net/u/20080306/17/f37a1818-3968-49b4-8f79-e5564486d63e.html  Java正则表达式教程
    译自 Java Tutorial 中正则表达式的部分,以及其他正则表达式相关资源网站[替换] http://topic.csdn.net/u/20081006/17/5a2138d0-7dce-46bb-8f76-c3412f06289b.html  正则问题
    涉及匹配 Java 语法中注释的正则表达式,由 5 个表达式组合而成[匹配] http://topic.csdn.net/u/20080911/12/b1d7b527-a855-4db3-a45f-7163ccd2f09f.html  求一个能匹配所有url的正则表达式
    涉及大小写、注释等匹配模式,以及各类组,可以看一下如何使用注释模式构建一个复杂的正则表达式[匹配] http://topic.csdn.net/u/20080610/17/15b8828c-43d5-43c5-803e-1f4d51ffb213.html  java正则表达式解析find kw=a kw1=b kw3=d c
    涉及环视、选择结构、边界匹配的综合应用[匹配] http://topic.csdn.net/u/20080529/18/6c4e70e9-4510-4af0-8874-207c5a9a1788.html  下班前求一正则表达式(解析 CSV 文件)
    从 CSV 文本中提取字段值[综合] http://topic.csdn.net/u/20080627/14/8a91b33a-f35c-4303-85b5-e0a8da462202.html  请解释一下正则的相关内容
    涉及多行匹配、限定字符、不区分大小写、选择结构[综合] http://topic.csdn.net/u/20080503/01/3c82b040-43b9-4b44-847d-07b366285957.html  确保字符串是1-100的数,怎么写正则
    主要介绍了环视结构,以及选择结构[综合] http://topic.csdn.net/u/20080325/17/fb7a3e8d-029a-4d8e-89ae-77a9d28ec301.html  正则表达式的问题
    介绍了捕获结构、非捕获结构(非捕获组、环视、独立组、匹配模式)、Unicode块、控制字符,以及贪婪与懒惰量词的匹配方式[替换] http://topic.csdn.net/u/20080313/14/a070f343-7fb3-4c19-86ba-36b56c780295.html  求一个正则表达式 过滤所有不在<script /script>之间的html注释<!---->
    涉及 dotall 模式、捕获组、非捕获组,以及贫婪、懒惰量词的综合应用,图片:http://p.blog.csdn.net/images/p_blog_csdn_net/bao110908/EntryImages/20090903/regex.jpg