这个正则表达式如何消除html?

时间:2015-01-28 09:42:35

标签: java regex

我看到了一个代码示例,并没有理解它如何仅打印Print语句。 感谢你的帮助。

String str = "<a href=/utility/ReportResult.jsp?reportId=5>Print</a>";
System.out.println(str.replaceAll("\\<.*?\\>", ""));

OutPut: Print

如何修改我的正则表达式以打印Print&lt;&gt; Report而不是PrintReport。以下是我的正则表达式和声明。         String str =&#34;打印&lt;&gt;报告&#34;;

    System.out.println(str.replaceAll("<.*?>", ""));

4 个答案:

答案 0 :(得分:1)

你不必逃脱<(棱角撑)。所以在java str.replaceAll("<.*?>", "")就足够了。

工作原理:

<.*?> - &gt;首先搜索<然后匹配所有内容,直到下一个>。请注意,.*?称为 lazy 选择器/匹配器。

答案 1 :(得分:1)

要打印Print<>Report而不是PrintReport,请按*更改+

System.out.println(str.replaceAll("<.+?>", ""));
//                            here __^

*表示 0 或更多先例字符
+表示 1 或更多先例字符

答案 2 :(得分:0)

它的正则表达式说什么b / w“&lt;”和“&gt;”必须用“”(空白字符串)重新表示 所以

<a href=/utility/ReportResult.jsp?reportId=5>==> ""(blank)
</a>==>""(blank)

并且只剩下“打印”

答案 3 :(得分:0)

首先,前导反斜杠被视为Java的转义序列,因此实际正则表达式为\<.*?\>

\<' matches the&lt;`字符(反斜杠再次是一个转义序列,表示后面的字符应按字面解释而不是正则表达式运算符)。这是html标签的开头。

.令牌匹配任何字符。

?是一个不情愿的量词,表示前面的标记(在这种情况下是任何字符)应该匹配零次或多次。

/>与标记的结尾匹配。由于?不情愿,.与此令牌可以匹配的字符不匹配。