下面的代码,是我的半成品,离想要的结果差一点点,可以直接拷贝运行看结果,如下: 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*[\"]? 但很可惜,这个依然没得到我想要的结果,真不如如何写了,各位大侠帮忙结果下吧,最好要运行下,出结果吧,先谢了.
{
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*[\"]? 但很可惜,这个依然没得到我想要的结果,真不如如何写了,各位大侠帮忙结果下吧,最好要运行下,出结果吧,先谢了.
String regex = "src=\\s*\"?(\\d+http://www)";//找src值不为http://的路径
没那么简单的啊,你这里用到了\\d就不对了,我在str5,str6,str7,str8中使用5678,只是为了表示,后四个并非http://打头的src值,如:aaahsd,adsf,343,等等都行,总之,非http://即可,个人觉得使用这句:?!http://是少不了的.
望有兴趣既然研究下,应该真没那么简单啊,但还是很感谢你的参与.
String regex = "src=\\s*\"?+(\\S+http://www)";
“路径”一词颇有迷惑性,我在你前面那个帖子中也说过了。如果真是那些 .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));
}
}
}
(带空格的和带"的http://貌似也被筛出来)
"http://www
http://www
"5http://www
6http://www
"7http://www
8http://www
String regex = "src=\\s*\"?+(\\S+http://www)";
输出:
5http://www
6http://www
7http://www
8http://www
但有个我不知道是什么作用,(?i)这个分组不是很明白干吗用的,这个?与i具体什么意思,能解释下吗?
如果少了(?i)这个,第八个就找不出来了,很怪.
再次感谢果子歌啦
就找不出来了呀
由于src的值,有可能没有引号",还可能有空格,所以就变复杂了些了. src = aaa/bb/a.jpg,与src= "aaa/bb/a.jpg" 认为这两个src值为一样的,它们都是aaa为开头的.
src = bc/a.jpg 与src = abc/a.jpg,前者为bc开头,后者为abc开头,空格不能算,即不能认为是" bc"打头的.
(?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