正则表达式学了忘忘了学太痛苦了,请csdn每天用比较熟悉的同学帮帮忙。要求:给定html字符串,将图片链接中的文件名中空格去掉原字符串例子:String s1 = 'ttached muscles. </P><P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_ anatomy 1.jpg" width=350 bord'去除后字符串:String s2 = 'ttached muscles. </P><P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.jpg" width=350 bord'可以确定的是'src="file:///android_asset/images/'肯定存在, 图片链接肯帝有扩展名,有可能是.bmp,.gif,.jpg等等,字符串中可能有若干图片链接,分不够我可以回帖补.有什么问题可以留言谢谢
解决方案 »
- 求大神指导java精通之门
- 求助:如何让3个任务并行执行,全部结束之后才会执行下面的任务?关键是:如何让3个任务同时执行?如何确保3个任务都执行完毕之后,才会执行下面的任务?
- 希望大家帮忙解决下~~呼呼 谢谢啦
- windows2003下正常,AIX下就乱码的问题
- 问题在于 1.1 这个数字不能被精确表示成为一个 double
- 怎么在程序中使用两个进程命令
- 求 HTTPClient 中,cookie 的使用方法
- 怎么取得路径?
- 请高手帮忙,请教几个正则表达式的写法???
- 我有一个很好的java开发工具,绝对比visualage,forte,visualcafe,jb好用,速度还快,谁想要?
- 自己弄的一个幼稚作品,不懂哪里错误百出...
- hibernate到底是如何进行主从表操作的
StringBuilder input = new StringBuilder(
"<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy1.jpg\" width=350 bord' />");
Pattern p = Pattern.compile("(?i)<img.*?src=\".*/(.*)\".*?>");
Matcher m = p.matcher(input);
m.find();
String group = m.group(1);
int start = m.start(1);
int end = m.end(1); input = input.replace(start, end, group.replaceAll(" ", ""));
System.out.println(input);
public class Regex {
public static void main(String[] args) {
String s="file:///android_asset/images/eye_ anatomy 1.jpg";
String str=s.replaceAll("\\s*","");
System.out.print(str);
}}
String str = "ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy 1.jpg\" width=350 bord src=\"file:///android_asset/images/e2e_ ana2222omy 2.jpg";
Pattern p = Pattern.compile("(?<=src=\"file:///android_asset/images/).*?\\s+.*?(?=\\.[bmp|gif|jpg])");
Matcher m = p.matcher(str);
while(m.find()){
int start = m.start();
int end = m.end();
str = str.substring(0, start) + m.group().replaceAll("\\s", "") + str.substring(end,str.length());
}
System.out.println(str);
}
public static void main(String[] args) {
String str = "'ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy 1.jpg\" width=350 bord'";
str += "'ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy 1.jpg\" width=350 bord'";
StringBuffer sb = new StringBuffer(str);
Matcher m = Pattern.compile("(?i)(file:///.*?/)([\\w\\s]+)(\\.\\w+)").matcher(str);
while(m.find()){
sb = sb.replace(m.start(2), m.end(2), m.group(2).replaceAll(" ", ""));
}
System.out.println(sb.toString());
}
public static void main(String[] args)
{
String str = "ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ a n a t o m y 1.jpg\" width=350 bord src=\"file:///android_asset/images/e2e_ ana2222omy 2.jpg\" end";
Pattern p = Pattern
.compile("(.*?)(src=\"file:///android_asset/images/)(.*?\\s+.*?)(\")");
Matcher m = p.matcher(str);
StringBuilder sb = new StringBuilder("");
int i = 0;
while (m.find()) {
sb.append(m.group(1)).append(m.group(2)).append(
m.group(3).replaceAll("\\s+", "")).append(m.group(4));
i = m.end();
}
sb.append(str.substring(i, str.length()));
System.out.println(sb.toString());
}4楼 5楼都有同一个问题, 多加几个空格就能很明显的看出来.
/**
* @param args
*/
public static void main(String[] args) {
String reg = "src=\"file:///android_asset/images/([^\"]+)\"";
Pattern pattern = Pattern.compile(reg);
System.out.println(pattern.toString());
Matcher matcher = pattern
.matcher("ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ anatomy 1.jpg\" width=350 bord");
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String src=matcher.group(0); matcher.appendReplacement(sb,src.replaceAll("\\s",""));
}
matcher.appendTail(sb);
System.out.println(sb); }
String str = "ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_ an a tomy 1.jpg\" width=350 bord src=\"file:///android_asset/images/e2e_ ana2222omy 2.jpg";
Pattern p = Pattern.compile("(?<=src=\"file:///android_asset/images/).*?\\s+.*?(?=\\.[bmp|gif|jpg])");
Matcher m = p.matcher(str);
while(m.find()){
int start = m.start();
int end = m.end();
str = str.substring(0, start) + m.group().replaceAll("\\s", "") + str.substring(end,str.length());
m = p.matcher(str);
}
System.out.println(str);
}
public static void main(String[] args) {
String str = "\r\n<P align=center>\r\n"
+ "<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy 1 .jpg\" width=350 border=0></P> fd ssda f \r\n"
+ "fd <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/ eye_anato my 1 .bmp\" width=350 border=0></P>\r\n"
+ "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"; Pattern p = Pattern.compile("(.*?)(src=\"file:///android_asset/images/)(.*?\\s+.*?)(\")");
Matcher m = p.matcher(str);
StringBuilder sb = new StringBuilder("");
int i = 0;
while (m.find()) {
sb.append(m.group(1)).append(m.group(2)).append(m.group(3).replaceAll("\\s+", "")).append(m.group(4));
i = m.end();
}
sb.append(str.substring(i, str.length()));
System.out.println(sb.toString());
}
}结果为:<IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.jpg"fd <P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.bmp" width=350 border=0></P><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.png" width=350 border=0>
谢谢,但也有些问题: public static void main(String[] args) {
String str = "\r\n<P align=center>\r\n"
+ "<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy 1 .jpg\" width=350 border=0></P> fd ssda f \r\n"
+ "fd <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/ eye_anato my 1 .bmp\" width=350 border=0></P>\r\n"
+ "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"; StringBuffer sb = new StringBuffer(str);
Matcher m = Pattern.compile("(?i)(file:///.*?/)([\\w\\s]+)(\\.\\w+)").matcher(str);
while (m.find()) {
sb = sb.replace(m.start(2), m.end(2), m.group(2).replaceAll(" ", ""));
}
System.out.println(sb.toString());
}
<P align=center>
<IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.jpg" width=350 border=0></P> fd ssda f
fd <P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/ eeye_anatomy1p" width=350 border=0></P><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatoeye_anatomy1th=350 border=0>
public static void main(String[] args) {
String str = "'ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye _ anatomy 1.jpg\" width=350 bord'";
str += "'ttached muscles. </P><P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/e ye_ anatomy 1.jpg\" width=350 bord'";
StringBuffer sb = new StringBuffer(str);
Matcher m = Pattern.compile("(?i)(file:///.*?/)(.*?)(\\.\\w+)").matcher(str);
while(m.find()){
sb = sb.replace(m.start(2), m.end(2), m.group(2).replaceAll("\\s*", ""));
}
System.out.println(sb.toString());
}
你虽然在测试中没有任何问题,但是我那个正则表达式并不像楼下朋友写的那么严格。
假设是在一个html页中查找的话,可以会把a标签中的属性也读取出来。
拿到方法自己会跟着需求变化来实现自己的功能,出现问题自己可以找可以改变现有的代码。
你的结果是需要这样么?/*<P align=center>
<IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.jpg" width=350 border=0></P> fd ssda f
fd <P align=center><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.bmp" width=350 border=0></P><IMG height=286 alt="eye_anatomy 1.jpg" src="file:///android_asset/images/eye_anatomy1.png" width=350 border=0>
*/
那么只需要将pattern改成dotall就行,如下Pattern p = Pattern.compile(
"(.*?)(src=\"file:///android_asset/images/)(.*?\\s+.*?)(\")",
Pattern.DOTALL);
String str = "\r\n<P align=center>\r\n"
+ "<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy 1 .jpg\" width=350 border=0></P> fd ssda f \r\n"
+ "fd <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/ eye_anato my 1 .bmp\" width=350 border=0></P>\r\n"
+ "fd <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/ eye_anato my 1 .bmp\" width=350 border=0></P>\r\n"
+ "fd <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/ eye_anato my 1 .bmp\" width=350 border=0></P>\r\n"
+ "fd <P align=center><IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/ eye_anato my 1 .bmp\" width=350 border=0></P>\r\n"
+ "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"
+ "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"
+ "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"
+ "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n"
+ "\r\n<IMG height=286 alt=\"eye_anatomy 1.jpg\" src=\"file:///android_asset/images/eye_anatomy1.png\" width=350 border=0>\r\n";Pattern p = Pattern.compile(
"(.*?)(src=\"file:///android_asset/images/)(.*?)(\")",
Pattern.DOTALL);
// nanoseconds 2600356Pattern p = Pattern.compile(
"(.*?)(src=\"file:///android_asset/images/)(.*?\\s+.*?)(\")",
Pattern.DOTALL);
// nanoseconds 6596175
其实也没改啥,尽量降低第一个正则的复杂度而已, 但是这样改以后,凡是src="file:///android_asset/images/..."这种都会对后面的那部分做replaceAll(" ",""),虽然结果不会有变化.