【发布时间】:2013-09-24 22:07:14
【问题描述】:
我是正则表达式的新手,但我相信这是我解决方案的方法。我正在尝试采用任意 HTML sn-p 并自定义图像标签。例如,
如果我有这个 HTML 代码:
<><><><><img src="blah.jpg"><><><><><><><><img src="blah2.jpg"><><><>
我想把它变成:
<><><><><img src="images/blah.jpg"><><><><><><><><img src="images/blah2.jpg"><><><>
我现在的代码是这样的:
Pattern p = Pattern.compile("<img.*src=\".*\\..*\"");
Matcher m = p.matcher(htmlString);
boolean b = m.find();
String imgPath = "src=\"images/";
while(b)
{
//Get file name.
String name="test.jpg\"";
//Assign new path.
m.group().replaceAll("src=\".*\"",imgPath+name);
}
【问题讨论】:
-
我不知道我在做什么。我不知道正则表达式应该是什么样子,也不知道如何用修改后的版本替换原始 HTML。
-
问题是你不应该使用正则表达式来解析 HTML。例如,
.*仅搜索同一行中的字符,因此img和src之间的返回会中断搜索。其次,img.*src是不正确的:这会搜索img和任意数量的字符以及 last 在同一行上出现的src。你不想要那个;它会在您的示例中以相同的结果捕获两个图像。 HTML 属性可以有单引号而不是双引号。 HTML 允许=符号周围的空格,但您的正则表达式不允许。以此类推。 -
我明白你在说什么,但同时我不知道如何继续使用另一种方法来分解 HTML 标签。然而,我现在有某种功能代码,但有一些问题。 img 标签正在定制,但我现在遇到的问题是它总是将每个 img 标签设置为相同的定制。例如, 对于所有的 img 标签都会变成 。
-
我无法从您在此处发布的 Java 源代码中看到您到底想要做什么。 (这是一个无限循环,因为
b永远不会改变。)我很确定基本问题就像我提到的那样:正则表达式返回<img src="blah"><><><><img src="blah2"而不仅仅是<img src="blah" -
由于我已经接近解决方案,我会考虑使用 switch 语句来解决您提到的一些变体(或者我可以尝试更多地了解正则表达式,以可能想出更好的东西)。用最简单的术语来说,我试图获取源属性并在文件名之前插入一个文件夹名。此外,如果我可以得到 img 标签上的所有匹配项,那么我可以根据需要得到所有文件名,我的代码就差不多完成了。