【问题标题】:Regex not working as expected for html tags正则表达式对 html 标签没有按预期工作
【发布时间】:2016-06-07 16:55:26
【问题描述】:

我无法为以下场景编写一些正则表达式。

1:This is <b>My Text</b> some other <b> </b> text as well <b></b><b>non empty tag1</b> other text.

预期输出: some other <b> </b> text as well <b></b>

2 : This is <b>My Text</b> some other <b> </b> text as well <b></b><b>non empty tag2</b> other text.

预期输出: some other <b> </b> text as well <b></b>

在这里,如果您注意到文本 My Text 是固定的(静态),但第二个非空标记值可能会有所不同。正则表达式应该能够提取<b>My Text</b> 和之后第一次出现的非空<b> 标记之间的文本。

我自己已经尝试了很多,但无法达到同样的效果。等待一些回应。

更新: 我的尝试如下。

    String BOLD_START_TAG = "(\\<b\\>)";
    String BOLD_END_TAG = "(\\<\\/b\\>)";
    StringBuffer regexBuffer = new StringBuffer("^(.*)")
                    .append(BOLD_START_TAG)
                    .append(regex)
                    .append(BOLD_END_TAG)
                    .append("(.*)")
                    .append(BOLD_START_TAG)
                    .append(nextElementString)
                    .append(BOLD_END_TAG)
                    .append("(.*)$");
 String regex = regexBuffer.toString();
 System.out.println(myText.replaceAll(regex, "$5"));

【问题讨论】:

  • 你尝试过哪些正则表达式,它们是如何失败的?
  • 可悲的是,几乎任何说 regex 和 html 的问题都会遭到反对
  • 你会说如果你不知道答案,[...],你会做出相当的假设。如果您将鼠标悬停在投票按钮上,您会注意到它指出 这个问题 [...] 没有用。 这很可能是这里发生的事情。不要使用正则表达式解析 HTML。
  • 问你想要什么,但如果用户认为它没有用,请不要感到惊讶。并且绝对不要要求他们不要投反对票。

标签: java regex


【解决方案1】:

这是一个肮脏的解决方案它并不是真正解析 html,它只是处理它的一小部分。 只适用于快速而肮脏的黑客攻击。例如,这个正则表达式假定&lt;b&gt;&lt;/b&gt; 都出现在同一行。

您问题中的示例看起来相同吗?但无论如何,怎么样:

/&lt;b&gt;My Text&lt;\/b&gt;(.*?)&lt;b&gt;.*\w+&lt;\/b&gt;/

请注意,您不能真正使用正则表达式解析 html。您只能希望处理一小部分案例。

编辑:在中间添加了一个懒惰的.*?匹配器,以应对一行出现多个&lt;b&gt;标签的情况。

【讨论】:

  • 嗨,谢谢你的回答.. 但它似乎不适用于我的情况,因为我可能还有其他一些非空的 b 标签,所以在你的情况下它会给我的文本和最后一个非空标签之间的所有文本:(
  • 对 - 在这种情况下,你想要一个惰性修饰符 .*?,我会修复这个例子。
猜你喜欢
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多