任何人都可以告诉我为什么这个正则表达式:
(<\s*script\s*>.*<\s*\/*script\s*>)
匹配整行:
< script > some more javascript</script> ggg <script>
答案 0 :(得分:1)
用 \ / 替换 \ / * 。
\ / * 匹配 0 或更多“/".
答案 1 :(得分:1)
你有两个问题:
'/'
量词使终止开关与0个或更多*
个字符匹配。你可以通过删除量词来解决这个问题。 要求单个终止开关,将正则表达式更改为:(<\s*script\s*>.*<\s*\/script\s*>)
.*
是贪婪的。这意味着它可以尽可能多地抓取,同时仍然匹配正则表达式的其余部分。在这种情况下:<\s*\/*script\s*>
。这意味着如果你在一行上有多个&#34; ...&lt; \ script&gt;&#34; s它将匹配整行,而不是每个&#34; ...&#34;。您想要的是将任何字符匹配为几次。这叫做懒惰匹配。在您的示例中,您可以使用?
限定任何量词来完成此操作:
.*?
使用你的正则表达式将成为:
(<\s*script\s*>.*?<\s*\/script\s*>)
如果您实际使用http://www.regexr.com&#34;参考&#34;用于构建正则表达式的菜单,您可以在&#34;量词和交替&#34;&gt;&#34;懒惰&#34;
下找到