【问题标题】:Using Regex in Java to "transform" a css style in html tag style在 Java 中使用 Regex 将 CSS 样式“转换”为 html 标签样式
【发布时间】:2016-06-16 18:55:06
【问题描述】:

我有一个 HTML 代码存储在 Java 代码中的 String 变量中,在这个字符串中我有这样的内容:

<span style="text-decoration: underline;">test</span>

我想要这样的东西

<u>test</u>

或者如果我有这个:

<span style="color: #2873ee; text-decoration: underline;">test</span>

我想要这个:

<font color="#2873ee"><u>test</u></font>

使用正则表达式我可以做到这一点:

affectedString.replaceAll("<span style=\"text-decoration: underline;\">(.*?)<\\/span>", "<u>$1</u>");

affectedString.replaceAll("<span style=\"color:\\s*?(#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}); text-decoration: underline;\">(.*?)<\\/span>", "<u><font color=\"$1\">$2</u></font>");

简单吧?但我有一些问题,我也不喜欢这段代码。 首先,为什么我不喜欢这个?因为我在css中需要用到这个样式的:Underline,Color and Line-through,而且每一种情况巧合都写不好的代码,例如:

affectedString.replaceAll("<span style=\"color:\\s*?(#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}); text-decoration: underline;\">(.*?)<\\/span>", "<u><font color=\"$1\">$2</u></font>");
affectedString.replaceAll("<span style=\"text-decoration: underline; color:\\s*?(#[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3});\">(.*?)<\\/span>", "<u><font color=\"$2\">$1</u></font>");

问题是这不适用于以下代码:

<span style="text-decoration: underline;">test <span style="text-decoration: line-through;">two</span></span>

在这种情况下,当我尝试应用正则表达式时,该部分匹配到第一个&lt;/span&gt;,所以最终结果是:

<u>test<span style="text-decoration:line-through;">two</u></span>

这是当我匹配 text-decoration:underline 时,然后当我匹配 text-decoration:line-through 时。第二个结果是:

<u>test <strike>two</u></strike>

当预期的结果是

<u>test <strike>two</strike></u>

我的问题是,我可以使用什么正则表达式来解决此类问题?还有更好的解决方案可以将那个简单的css“转换”成html标签吗?

谢谢

【问题讨论】:

  • 您不应该使用正则表达式来解析 XML/HTML。
  • 您或其他回答者为此类任务提供的任何正则表达式都将是复杂的、容易出错的且外观难看。为此,您肯定需要某种 html 分析器/解析器

标签: java html css regex


【解决方案1】:

我建议不要使用正则表达式。调试/扩展并不容易,而且很快就会变得讨厌。您可以使用像 jsoup 这样的库来解析 HTML、遍历 DOM 并使用 CSS 选择器来获取元素。例如。获取所有带有 class 属性的 div

Elements divs = doc.select("div[class]");

【讨论】:

    猜你喜欢
    • 2015-04-20
    • 2017-05-09
    • 1970-01-01
    • 2021-06-20
    • 2014-10-08
    • 2019-05-08
    • 1970-01-01
    • 2021-05-11
    • 2020-02-09
    相关资源
    最近更新 更多