题目可能有点费解,还是用代码说明吧? public static void main(String[] args)
{
String str1 = "<img alt=\"\" src=\"Http://com/bao/uploaded/i8/aa.jpg\" />";//有含http://字符串的,不要找出来

//String str2 = "<img alt=\"\" src=\"HttpAAAA://com/bao/uploaded/i8/aa.jpg\" />";//这个要找出来,
        
        Pattern pattern = Pattern.compile("<img.*?(?<=[hH][Tt][Tt][Pp]:\\/\\/).*?(?<=\\/)([^\\/\\<>\\*\\?\\:\"\\|]{1,255}\\.\\w+)(?=\").*?>");//找出文件名
        
        Matcher matcher = pattern.matcher(str1); 
//Matcher matcher = pattern.matcher(str2); 
        
        while (matcher.find())
        {         
         System.out.println(matcher.group(1));//str1求得结果为aa.jpg,str2求得结果为空,跟我要的结果恰恰相反了,我要str1的为空,str2的为aa.jpg,即当str值出现http://开头时,值要为空,如何写呢?
        }
}

解决方案 »

  1.   

    补充:即要找出所有img标签中,src的值开头值不为http://的文件名,为http://的文件名要为空.
    我知道正则里有个"非"的标号,用^,如[^a]指非a的值,但对于整个单词,要如何表示呢?请各位正则方面的高人指教.
      

  2.   

    String regex = "(?i)<img[^>]+src\\s*=\\s*\"(?!http://)[^>\"]+\"[^>]*>";
      

  3.   

    不知道你要找所谓的文件名只是 .jpg 还是什么,这里只抛砖引玉吧。good luck!
      

  4.   

    (?<=[hH][Tt][Tt][Pp]:\\/\\/)
    你的正则匹配的就是 http:// ,所以str1 的matcher.find()==true 而str2的matcher.find()==false,
    你的需求我不是很明白,单纯在这个方法里达到你想要的结果的话
    [hH][Tt][Tt][Pp]).+(:\\/\\/)
      

  5.   


    多谢火龙果,这个用(?!http://是可以的,问题基本解决,但我求路径时,要遇见一些麻烦,感觉很奇怪,多种情况时,老求不来,本贴先结了,另一个问题我另开贴再问吧.