需求:将网页分享给其他人,JShare的分享模板如下:



其中有标题(红色)、内容(黄色)、图片(绿色),但是接口中没有给图片的URL,而html格式的内容中有<img src="http://……">标签,需要去内容中自己提取第一张图片作为分享的图标,如下:

所以,这个时候我们的需求就一目了然了:用正则表达式从繁杂的内容中找到我们需要的图片。

解决:
1、正则表达式:( http://jszx-jxpt.cuit.edu.cn/JavaAPI/java/util/regex/Pattern.html )官方API,供查询了解
2、代码查找:
一、先找到<img src="">标签,用到的正则表达式("<img.*?>")
代码如下:

public static List<String> getMatchString(){
    List<String> pics = new ArrayList<>(); // 因文件可能有多张图片,故用集合来存储结果
    Pattern compile = null;
    if (isDistinguish){ // isDistinguish:是否区分大小写
        compile = Pattern.compile("<img.*?>"); // "<img.*?>" : 获取标签的正则
    }else{
        compile = Pattern.compile("<img.*?>", Pattern.CASE_INSENSITIVE);
    Matcher matcher = compile.matcher(string); // string:后台返的内容,图片就是从中提取的
    while (matcher.find()){
        String img = matcher.group();
        pics.add(img);
    return pics;

运行,得到结果如下:

可以看出,本文有三张图片

二、再拿到标签中的地址,直接可以使用,代码如下:
 

List<String> img_url = new ArrayList<>();
* img : 上面打印的标签内容,将它直接提取为我们要的http……
* "\"http?(.*?)(\"|>|\\s+)" : 获取src中 "" 图片地址的正则
Matcher m = Pattern.compile("\"http?(.*?)(\"|>|\\s+)").matcher(img); 
m.find();
String url = m.group()
img_url.add(url.substring(1, url.length()-1));

运行,得到的结果如下:

可以看出,直接光秃秃的图片地址裸露在脸前,可以直接用了

最后贴出完整代码
 

* regex:获取<img src="">标签的正则("<img.*?>") * string:提取图片标签的内容 * isDistinguish:是否区分大小写 public static List<String> getMatchString(String regex, String string, boolean isDistinguish){ List<String> pics = new ArrayList<>(); Pattern compile = null; if (isDistinguish){ compile = Pattern.compile(regex); }else{ compile = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher matcher = compile.matcher(string); while (matcher.find()){ String img = matcher.group(); // pics.add(img); // 如果只需要标签,那到这一步就可以了,如果直接需要图片URL,copy代码到最后 * reg_html_img_src_http: 获取src中 "" 图片地址的正则("\"http?(.*?)(\"|>|\\s+)") * 获取标签中src的正则表达式("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)") Matcher m = Pattern.compile(reg_html_img_src_http).matcher(img); m.find(); String group = m.group(); pics.add(group.substring(1, group.length() - 1)); return pics; 获取所有图片 public static Set<String> getImgStr(String htmlStr) { Set<String> pics = new HashSet<>(); String img = ""; Pattern p_image; Matcher m_image; 字符串相关学习资料:https://edu.51cto.com/video/3832.htmlhttps://edu.51cto.com/video/4055.htmlJava正则表达式提取字符串括号的数据 作为一名经验丰富的开发者,我很高兴能帮助刚入行的小白学习如何使用Java正则表达式提取字符串括号内的数据。... 有很多时候会有这样的需求,获取一个网页图片的路径,在Java,可以使用Pattern类、Matcher类,配合正则表达式来获取一个字符串需要的特定内容。 首先来看一下网页一个标签所处的位置,例如:String content =“...”,其img标签可能的格式为 或,标签结束方式可能为 或者 或者<img ...>  ;为了代码有更好的鲁棒性,所以在匹配文本的时候,这些情况都需要 要匹配的字符串:正则表达式:[^'"]*)[\'"])|(?[^\s]*))提取的结果:image/ad1.gifimage/ad2.gifPHP正则提取或替换img标记属性 /*PHP正则提取图片img标记的任意属性*/ $str = 'PHP正则提取或更改图片img标记的任意属性'; //1、取整个图片代码 preg_match('/]*?src\s*=\s*(\'|\")(.*?)\\1... importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.net.URL;importjava.net.URLConnection;importjava.util.ArrayList;importjava.util.List;imp... 这个正则会匹配类似<img src="http://example.com/1.jpg">src属性和括号的连接。4. imgSrcs数组包含了所有img标签src链接,我们获取到了HTML图片的URL列表。 $str='<p> src="http://img.baidu.com/hi/jx2/j_0024.gif"/>22222222222222222222<img src="https://ab... 案例代码: <p><img src=\\\"https://data.stcn.com/djsj/202007/W020200731477969213655.png\\\" title=\\\"图3.png\\\" alt=\\\"图3.png\\\" oldsrc=\\\"W020200731477969213655.png\\\" </img></></p>"; 正则表达式 <img[\s+]src=.*?(\/>|\&.. public void getItemDetail() throws IOException { String url="https://www.xxx.com";//此处url作了处理... import java.util.regex.Matcher;import java.util.regex.Pattern; /** *   * * &lt;p&gt; *  *   * Title: HTML相关的正则表达式工具类   * * &lt;/p&gt; *   * * &lt;p&gt; *  *   * Description: 包括过滤HTML标记,转换HTML标记,替换特定H...