【问题标题】:Regular expression to remove HTML tags without <br/> tab from a string从字符串中删除没有 <br/> 选项卡的 HTML 标记的正则表达式
【发布时间】:2018-01-30 07:56:43
【问题描述】:

我目前卡在为字符串 &lt;b&gt;abc&lt;br/&gt;&lt;/b&gt;xy&lt;i&gt;abcd&lt;br/&gt;&lt;/i&gt;&lt;th&gt;ab&lt;br/&gt;&lt;/th&gt;wvx 等的以下要求生成正则表达式。

我的要求是使用java replaceAll(&lt;regex&gt;,"");方法删除&lt;b&gt;&lt;/b&gt;&lt;i&gt;&lt;/i&gt;&lt;th&gt;&lt;/th&gt;等的&lt;&gt;字符而不替换&lt;br/&gt; 标签的&lt;&gt; 字符。

例子:

输入:&lt;b&gt;abc&lt;br/&gt;&lt;/b&gt; 输出应该是:babc&lt;br/&gt;/b

输入:xy&lt;i&gt;abcd&lt;br/&gt;&lt;/i&gt; 输出应该是:xyiabcd&lt;br/&gt;/i

输入:&lt;th&gt;ab&lt;br/&gt;&lt;/th&gt;wvx 输出应该是:thab&lt;br/&gt;/thwvx

.......等等

请帮我解决这个问题。

【问题讨论】:

  • 您希望替换字符串 with &lt;br/&gt; 标签。你的问题表述有误吗?
  • 不,其实我想保留&lt;br/&gt;。请检查示例
  • 任何时候你使用正则表达式解析html,你都会失去一点灵魂。看到这个stackoverflow.com/questions/1732348/…

标签: java html regex


【解决方案1】:

&lt;/?([a-z]+)&gt; 应该可以。如果斜线在字母后面,则不匹配。

【讨论】:

  • 感谢您的回答。但我只需要匹配&lt;&gt;&lt;b&gt;&lt;/b&gt; 标签。就像&lt;b&gt;abc&lt;br/&gt;&lt;/b&gt; 一样,输出应该是:babc&lt;br/&gt;/b。你有什么想法吗?
  • 当然。完整的命令是input.replaceAll("&lt;/?([a-z]+)&gt;", "$1")。 $1 更改为圆括号中的任何内容。
  • 要求不提及&lt;br&gt;,不带斜线。 :) 它看起来像一些家庭作业。但是如果&lt;br&gt; 也应该被过滤,那么我的正则表达式不正确。
  • 非常感谢您的回答。它工作完美,符合要求。你拯救了我的一天。谢谢!!!
【解决方案2】:

您可以尝试使用String#replaceAll:

String input = "<b>abc<br/></b>";
input = input.replaceAll("</?(?!br)([^>]+)>", "$1");
System.out.println(input);

babc<br/>b

模式&lt;/?(?!br)[^&gt;]+)&gt; 将匹配除br 之外的任何开始或结束HTML 标记。它将仅用标签的文本名称替换该标签。

请注意,使用正则表达式解析 HTML 通常不是一个好主意。如果您在示例字符串中只有单级 HTML,这可能适用于您的情况。

Demo

【讨论】:

  • 蒂姆,非常感谢您的回答。它工作完美,符合要求。你拯救了我的一天。谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 2010-09-12
  • 2022-09-23
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
相关资源
最近更新 更多