gpt4 book ai didi

Java正则表达式保留特定的结束标签

转载 作者:行者123 更新时间:2023-12-01 17:39:57 25 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式来删除除少数结束 xml 标记之外的所有内容。

代码看起来很简单:

String stringToParse = "<body><xml>some stuff</xml></body>";
Pattern pattern = Pattern.compile("</[^(a|em|li)]*?>");
Matcher matcher = pattern.matcher(stringToParse);
stringToParse = matcher.replaceAll("");

但是,当它运行时,它会跳过“xml”结束标记。它似乎会跳过编译组中存在匹配字符的任何标记(a|em|li),即如果我从“li”中删除“l”,它就会起作用。

我希望它返回以下字符串:“<body><xml>some stuff ”(我正在进行额外的解析以删除开始标记,但保持示例简单)。

最佳答案

您可能不应该使用正则表达式来完成此任务,但让我们看看会发生什么......

您的问题是您正在使用负字符类,并且在字符类中您无法编写复杂的表达式 - 只能编写字符。您可以尝试使用负前瞻:

"</(?!a|em|li).*?>"

但这无法正确处理许多情况:

  • 包含看起来像标签的内容的评论。
  • 标签作为属性中的字符串。
  • 以 a、em 或 li 开头但实际上是其他标签的标签。
  • 大写字母。
  • 等等...

您或许可以解决这些问题,但您需要考虑是否值得,或者寻找基于正确 HTML 解析器的解决方案是否会更好。

关于Java正则表达式保留特定的结束标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2188275/

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