1

我有一个包含大量图像标签的 Html 字符串,我需要获取标签并进行更改。例如:

String imageRegex = "(<img.+(src=\".+\").+/>){1}";
String str = "<img src=\"static/image/smiley/comcom/9.gif\" smilieid=\"296\" border=\"0\" alt=\"\" />hello world<img src=\"static/image/smiley/comcom/7.gif\" smilieid=\"294\" border=\"0\" alt=\"\" />";
Matcher matcher = Pattern.compile(imageRegex, Pattern.CASE_INSENSITIVE).matcher(msg);
int i = 0;
while (matcher.find()) {
    i++;
    Log.i("TAG", matcher.group());
}

结果是:

<img src="static/image/smiley/comcom/9.gif" smilieid="296" border="0" alt="" />hello world<img src="static/image/smiley/comcom/7.gif" smilieid="294" border="0" alt="" />

但这不是我想要的,我想要的结果是

<img src="static/image/smiley/comcom/9.gif" smilieid="296" border="0" alt="" />
<img src="static/image/smiley/comcom/7.gif" smilieid="294" border="0" alt="" /> 

我的正则表达式有什么问题?

4

3 回答 3

1

试试看(<img)(.*?)(/>),这应该可以解决问题,虽然是的,你不应该使用 Regex 来解析 HTML,因为人们会一遍又一遍地告诉你。

我没有安装 Eclipse,但我有 VS2010,这对我有用。

        String imageRegex = "(<img)(.*?)(/>)";
        String str = "<img src=\"static/image/smiley/comcom/9.gif\" smilieid=\"296\" border=\"0\" alt=\"\" />hello world<img src=\"static/image/smiley/comcom/7.gif\" smilieid=\"294\" border=\"0\" alt=\"\" />";
        System.Text.RegularExpressions.MatchCollection match = System.Text.RegularExpressions.Regex.Matches(str, imageRegex, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
        StringBuilder sb = new StringBuilder();
        foreach (System.Text.RegularExpressions.Match m in match)
        {
            sb.AppendLine(m.Value);
        }
        System.Windows.MessageBox.Show(sb.ToString());

结果:

<img src="static/image/smiley/comcom/9.gif" smilieid="296" border="0" alt="" /> 
<img src="static/image/smiley/comcom/7.gif" smilieid="294" border="0" alt="" />
于 2012-07-10T13:19:38.163 回答
0

David M 是正确的,你真的不应该尝试这样做,但你的具体问题是+你的正则表达式中的量词是贪婪的,所以它会匹配可能匹配的最长子字符串。

有关量词的更多详细信息,请参阅正则表达式教程

于 2012-07-10T13:21:46.807 回答
0

我不建议使用正则表达式来解析 HTML。请考虑 JSoup 或类似的解决方案

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements images = doc.select("img");

每次您尝试使用正则表达式解析 HTML 时,邪恶的孩子都会流着处女的血,而俄罗斯黑客会破解您的 web 应用程序。

于 2012-07-10T13:38:27.573 回答