Java正则表达式:匹配和提取图片标签(img)

正则表达式是一种用来匹配、查找和提取文本中模式的强大工具。在Java中,正则表达式是通过java.util.regex包提供的类和方法进行操作的。本文将重点介绍如何使用正则表达式匹配和提取HTML文档中的图片标签<img>。

1. 正则表达式简介

正则表达式是一种用来描述、匹配和查找字符串模式的特殊字符序列。它可以用来精确地匹配、查找和替换字符串中的文本。正则表达式由普通字符(如字母、数字、标点符号等)和特殊字符(如元字符、限定符等)组成。在Java中,正则表达式使用字符串表示,以\开始和结束。

2. 匹配<img>标签

在HTML文档中,图片标签<img>用于插入图片。它的基本语法如下:

<img src="image.jpg" alt="Description" width="100" height="100">

要匹配和提取<img>标签,可以使用如下的正则表达式:

String pattern = "<img[^>]+>";

上述正则表达式的含义如下:

  • <img>:匹配开始的<img>标签
  • [^>]+:匹配除>之外的任意字符,+表示匹配一次或多次

3. 使用正则表达式提取<img>标签

在Java中,可以使用java.util.regex包提供的Pattern和Matcher类来进行正则表达式的匹配和提取操作。以下是一个简单的示例代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ImageTagExtractor {
    public static void main(String[] args) {
        // 待匹配的HTML文档
        String html = "<html><body><img src=\"image1.jpg\" alt=\"Image 1\"><img src=\"image2.jpg\" alt=\"Image 2\"></body></html>";

        // 正则表达式
        String pattern = "<img[^>]+>";

        // 创建Pattern对象
        Pattern imgTagPattern = Pattern.compile(pattern);

        // 创建Matcher对象
        Matcher matcher = imgTagPattern.matcher(html);

        // 提取匹配的<img>标签
        while (matcher.find()) {
            String imgTag = matcher.group();
            System.out.println(imgTag);
        }
    }
}

运行上述代码,输出如下:

<img src="image1.jpg" alt="Image 1">
<img src="image2.jpg" alt="Image 2">

上述代码的解释如下:

  • 首先定义了待匹配的HTML文档字符串html
  • 然后定义了正则表达式字符串pattern
  • 接下来创建了Pattern对象imgTagPattern,并传入正则表达式
  • 然后创建了Matcher对象matcher,并传入待匹配的HTML文档字符串
  • 最后使用while循环遍历所有匹配的<img>标签,并使用matcher.group()方法提取匹配的字符串

4. 提取<img>标签的属性

除了提取整个<img>标签,有时候还需要提取<img>标签中的属性,如srcaltwidthheight等。可以使用正则表达式的分组功能来实现。以下是一个示例代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ImageTagExtractor {
    public static void main(String[] args) {
        // 待匹配的HTML文档
        String html = "<html><body><img src=\"image1.jpg\" alt=\"Image 1\"><img src=\"image2.jpg\" alt=\"Image 2\"></body></html>";

        // 正则表达式
        String pattern = "<img\\s+src=\"([^\\\"]+)\"\\s+alt=\"([^\\\"]+)\"\\s+width=\"(\\d+)\"\\s+height=\"(\\d+)\">";

        // 创建Pattern对象
        Pattern imgTagPattern = Pattern.compile(pattern);

        // 创建Matcher对象
        Matcher matcher = imgTagPattern.matcher(html);

        // 提取匹配的<img>标签
        while (matcher.find()) {
            String src = matcher.group(1);
            String alt = matcher.group(2);
            int width = Integer.parseInt