我正在使用此正则表达式来查找< script>标记:
<script (.|\n)*>(.|\n)*?</script>
问题是,它匹配下面的ENTIRE字符串,而不仅仅是每个标签:
<script src="crap2.js"></script><script src="crap2.js"></script>
答案 0 :(得分:8)
由于这个原因以及各种其他原因,你最好使用DOM来处理HTML。
答案 1 :(得分:7)
除了RegEx match open tags except XHTML self-contained tags之外,我认为不需要说任何其他内容。
答案 2 :(得分:7)
将您的第一个*更改为*?
这是非贪婪的'全部匹配',因此它将匹配下一个'&gt;'之前的最小字符集。
答案 3 :(得分:7)
另见本周的编码恐怖片:Parsing Html The Cthulhu Way,灵感来自@JS Bangs链接的史诗answer by @bobince。
答案 4 :(得分:2)
I'll keep posting links to my previous answers直到此问题类型被清除来自这个星球的表面(希望在10年左右):不要使用不规则语言(如html或xml)的正则表达式。改为使用解析器。
答案 5 :(得分:0)
<script[\s\S]*?>[\s\S]*?</script>
这符合最常见的情况,但考虑JS Bangs answer 非常非常重要。
答案 6 :(得分:-1)
尝试排除任何'&lt;'来自内容
<script (.|\n)*>(.|\n|[^<])*?</script>