正则表达式求助: 查找图片名与上级地址

Inhibitory 2011-02-22 02:52:05
前提:下面是的字符串中有多个img,有的是在同一行,有的在下一行
String str = "<img src=\"/y/186.png\"/>.......................<img src=\"server/b/x/123.jpg\" />\n<img src=\"server/b/x/真是难啊.jpg\" >";

要求:查找出图片的名字,同时找出上级地址
限制:图片的名字可以是有效的名字,可以是汉字,某些名字中可以存在的特殊字符,不只局限于字母,下划线,数字
因为匹配的时候肯定是要使用非贪婪模式匹配,但是我的实现很郁闷,只能找出一级地址,想了很多方法,查了很多资料,都没有完成要求。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
public static void main(String[] args) {
String str = "<img src=\"/y/186.png\"/>.......................<img src=\"server/b/x/123.jpg\" />\n<img src=\"server/b/x/真是难啊.jpg\" >";
Pattern pattern = Pattern.compile("<img src=\"([^/]*/)+?([^\\.]+\\.[^\"]+)\"(/| /| )?>");
Matcher matcher = pattern.matcher(str);

while (matcher.find()) {
System.out.println(matcher.group(1) + " : " + matcher.group(2)); // group1是上级地址,group2是图片的名字. 我的实现是错误的,*^_^*
}
}
}


...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 viszl 的回复:]

Java code

package test3;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
public static void main(String[] args) {
String str = "<img src=\"/y/186.p……
[/Quote]
*^_^*,谢谢,你的这个正则非常好,可以实现我需要的功能了,
loveofmylife 2011-02-22
  • 打赏
  • 举报
回复

package test3;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
public static void main(String[] args) {
String str = "<img src=\"/y/186.png\"/>.......................<img src=\"server/b/x/123.jpg\" />\n<img src=\"server/b/x/真是难啊.jpg\" >";
Pattern pattern = Pattern
.compile("<img src=\"(([^/]*/(?!>))+)([^\\.]+\\.[^\"]+)\"(/| /| )?>");
Matcher matcher = pattern.matcher(str);

while (matcher.find()) {
System.out.println(matcher.group(1) + " : " + matcher.group(3)); // group1是上级地址,group2是图片的名字. 我的实现是错误的,*^_^*
}
}
}


/y/ : 186.png
server/b/x/ : 123.jpg
server/b/x/ : 真是难啊.jpg

是这样吗,没用非贪婪匹配,就是普通的贪婪匹配
Inhibitory 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 knightzhuwei 的回复:]

其实要找出图片地址如server/b/x/123.jpg是很简单的
而图片的种类无非jpg,png,gif,jpeg几种,图片的名字里也是不可能包含/的
写个方法传图片地址进去用截字符串的方式返回图片名字和上级地址应该也不困难
如果只是功能需求 不是一定要用正则优美实现的话可以考虑下
[/Quote]

^_^,正巧我也要使用这个正则在php里使用preg_replace函数把上一级目录换成一个标志符,所以要这样的表达式。
在Java中可以是可以先提取出图片的整个地址,这个使用非贪婪匹配简单得多,再分析出名字与上一级地址。
其实我就是想走个捷径,用一个正则搞定。
当然,php里也可以这样分步做,因为php的preg_replace支持数组
knightzhuwei 2011-02-22
  • 打赏
  • 举报
回复
其实要找出图片地址如server/b/x/123.jpg是很简单的
而图片的种类无非jpg,png,gif,jpeg几种,图片的名字里也是不可能包含/的
写个方法传图片地址进去用截字符串的方式返回图片名字和上级地址应该也不困难
如果只是功能需求 不是一定要用正则优美实现的话可以考虑下
Inhibitory 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 knightzhuwei 的回复:]

“只能找出一级地址”是什么意思?
[/Quote]
这个是现在程序的输出:
/ : y/186.png
server/ : b/x/123.jpg
server/ : b/x/真是难啊.jpg
knightzhuwei 2011-02-22
  • 打赏
  • 举报
回复
“只能找出一级地址”是什么意思?
Inhibitory 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 knightzhuwei 的回复:]

server/b/x/123.jpg 这个是图片地址?
server/b/x 这个是上级地址?
[/Quote]
是的,其实只是个例子,可以是全的HTTP地址,也可以是相对地址
knightzhuwei 2011-02-22
  • 打赏
  • 举报
回复
server/b/x/123.jpg 这个是图片地址?
server/b/x 这个是上级地址?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧