从java字符串替换脚本标记

时间:2013-12-19 15:12:15

标签: java regex string

考虑以下字符串

String html = "<div>test> <div /><script > docuement.alert()
                                                     </script> <p>ptag</p>";

我使用正则表达式来替换脚本标记

来完成它
    System.out.println(s.replaceAll("(?s)<script.*?(/>|</script>)", ""));

那给了

<div >test> <div />suresh >   <p>ptag</p>

但我被要求转换成

<div >test> <div />&lt;script &gt;  docuement.alert()
                                                     &lt;/script &gt; <p>ptag</p>

使用subStringindexOf我可以做到这一点,但我不知道如何使用正则表达式来做这件事。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

怎么样

s.replaceAll("(?i)<(/?script[^>]*)>", "&lt;$1&gt;")

这将找到

  • (?i)不区分大小写的标记
  • <
  • 可选/之后
  • script字面意思,感谢(?i)它也会匹配scriptScrIPtSCRIPT,......
  • [^>]*零个非>个字符
  • >

使用括号我将<>放在第1组中,之后可以通过$1替换。


演示

String s = "<div >suresh > <div />suresh >  <script > docuement.alert()"
        + " </script> <p>ptag</p>";
System.out.println(s.replaceAll("(?i)<(/?script[^>]*)>", "&lt;$1&gt;"));

输出:

<div >suresh > <div />suresh >  &lt;script &gt; docuement.alert() &lt;/script&gt; <p>ptag</p>