gpt4 book ai didi

java - 在 Java 中使用 Regex 到 "transform"html 标签样式中的 css 样式

转载 作者:行者123 更新时间:2023-11-28 01:15:41 25 4
gpt4 key购买 nike

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

<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>

在这种情况下,当我尝试应用正则表达式时,该部分匹配到第一个 </span>。 ,所以最后的结果是:

<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 标签?

谢谢

最佳答案

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

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

关于java - 在 Java 中使用 Regex 到 "transform"html 标签样式中的 css 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35772333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com