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>标签中的属性,如src
、alt
、width
、height
等。可以使用正则表达式的分组功能来实现。以下是一个示例代码:
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