在Java 8中提取字符串中的<img>标签并收集至List
从字符串中提取所有
标签到List的实现方法
核心思路
利用Matcher的循环匹配能力,通过find()方法遍历所有符合正则的结果,将每个匹配到的<img>标签存入List即可。
修正正则表达式
你当前的正则存在转义冗余问题,调整为正确的Java正则字符串:"<img.*?>"(匹配从<img开始到最近的>结束的完整标签,符合你要求的从<img src="到">的范围)。如果需要严格匹配以<img src="开头的标签,可以用"<img src=\".*?\">"。
完整实现代码
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ImgTagExtractor { public static void main(String[] args) { final String regex = "<img.*?>"; // 或严格匹配src开头:"<img src=\".*?\">" 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 Pattern pattern = Pattern.compile(regex); final Matcher matcher = pattern.matcher(string); // 用于存储所有匹配到的img标签 List<String> imgTags = new ArrayList<>(); // 循环查找所有匹配项 while (matcher.find()) { imgTags.add(matcher.group()); // 获取当前匹配的完整标签并加入List } // 测试输出结果 for (String tag : imgTags) { System.out.println(tag); } } }
关键步骤说明
- 初始化List:创建
ArrayList<String>来存储提取到的标签。 - 循环匹配:调用
matcher.find(),该方法会逐个查找字符串中的匹配项,找到时返回true,直到没有匹配项为止。 - 收集结果:每次
find()返回true时,用matcher.group()获取当前匹配的完整字符串,添加到List中。
注意事项
- 如果你的
标签存在复杂嵌套(比如属性值包含转义引号),正则可能无法准确匹配,这种情况下建议使用HTML解析库(如Jsoup)来处理,避免正则的局限性。
Pattern.MULTILINE模式在这里不需要,因为你的匹配逻辑不依赖行首行尾(^或$),可以去掉。
内容的提问来源于stack exchange,提问作者Nitin Kumar
相关产品推荐
相关产品推荐

