题目可能有点费解,还是用代码说明吧? 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://开头时,值要为空,如何写呢?
}
}
{
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://开头时,值要为空,如何写呢?
}
}
我知道正则里有个"非"的标号,用^,如[^a]指非a的值,但对于整个单词,要如何表示呢?请各位正则方面的高人指教.
你的正则匹配的就是 http:// ,所以str1 的matcher.find()==true 而str2的matcher.find()==false,
你的需求我不是很明白,单纯在这个方法里达到你想要的结果的话
[hH][Tt][Tt][Pp]).+(:\\/\\/)
多谢火龙果,这个用(?!http://是可以的,问题基本解决,但我求路径时,要遇见一些麻烦,感觉很奇怪,多种情况时,老求不来,本贴先结了,另一个问题我另开贴再问吧.