【发布时间】:2022-11-16 00:33:26
【问题描述】:
有一个用例,我有一个很长的字符串,它可以包含许多 <img> 标签。
我需要在列表中收集从开始(<img src=")到关闭(">)的整个图像标签。
我写了一个正则表达式("<img.*?\">"gm)来选择这些,但不知道如何将它们全部收集到一个列表中。
例如:
final String regex = "<img.*?\\\">";
final String string = "Hello World <img src=\"https://dummyimage.com/300.png/09f/777\"> \nMy Name <img src=\"https://dummyimage.com/300.png/09f/ff2\"> Random Text\nHello\nHello Random <img src=\"https://dummyimage.com/300.png/09f/888\"> \nMy Name <img src=\"https://dummyimage.com/300.png/09f/2ff\">adaad\n";
final String replace = "";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
final String result = matcher.replaceAll(replace); // Here, how can I collect all the image tags in a list
【问题讨论】:
-
您可以使用
Matcher类下的#start、#end和#group来提取这些信息。这将是迭代匹配中的组,然后自己将它们添加到列表中的问题。请注意,如果您的正则表达式在每个组中包含多个标签(例如<img ...> ... </img>,您会遇到正则表达式的限制,并且可能需要一个 html 解析器。 -
就个人而言,我不会尝试重新发明 html 解析器。没有必要,你不会像那些以写它们为生的人那样做