需要有关如何制作正则表达式的帮助,以及为什么这个不起作用

这是文本:

<div class="center-content">  <h2> <a href="https://lapiedradesisifo.com/2019/11/04/la-silenciosa-linea-del-idioma-no-hablado/" class="l:3207185" > La silenciosa línea del idioma no hablado </a>

我的代码:

Pattern p = Pattern.compile("<div class=\"center-content\"> *<h2> <a.{10,200} >(.{50,200})</a>");
Matcher m = p.matcher(text);

StringBuilder sb = new StringBuilder();
while(m.find()){
    sb.append(m.group(1) + "\n");
}

System.out.println(sb.toString());

这是我希望在屏幕上打印的内容:

"La silenciosa línea del idioma no hablado"

但是什么也没印出来,我真的不知道为什么,因为我已经用类似的例子尝试过了,而且行得通。

老实说,我得到了此正则表达式的一些帮助,但我仍然不太了解它的工作原理,因此非常感谢您提供一些帮助。

gandong5050 回答:需要有关如何制作正则表达式的帮助,以及为什么这个不起作用

“。”默认情况下不匹配换行符。您要解析的html似乎包含换行符。

您可以使用Pattern.compile("pattern",Pattern.DOTALL)来创建“。”也匹配换行符。 即使这样,您的正则表达式也不会匹配。您可以使用一些在线测试仪来找出问题所在(“ La silenciosalíneadel idioma no hablado”

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#DOTALL https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#compile(java.lang.String,%20int)

,

正如Mike在评论中指出的,请使用适当的HTML解析器来处理HTML输入。 但是,如果您对正则表达式的工作方式感兴趣,我将尝试简要地描述一下。

当前模式

您当前的模式如下

<div class=\"center-content\">-实际匹配<div class="center-content">

*<h2>-匹配零到无限制时间之间的任意字符,后跟<h2>

<a.{10,200} >-匹配<a,后跟10到200次之间的任意字符,后跟字符>

(.{50,200})-此字符与50到200次之间的任何字符匹配,并将其捕获为一组。顺便说一下,这就是您通过调用m.group(1)

在代码中访问的内容

</a>-实际匹配</a>

简体版

但是,如果您的目标只是捕获包裹在a元素中的文本,则可以将正则表达式简化为 <a\s+href=.*?>(.*?)</a>的工作方式如下:

<a\s+href=-匹配<a href=

.*?>-匹配a的URL部分(0到无限制时间之间的任何字符,尽可能少的次数),后跟>

(.*?)-捕获 ><之间的任何内容(尽可能少的次数)-调用.group(1)来获取 >

</a>-匹配</a>

本文链接:https://www.f2er.com/3156156.html

大家都在问