正则表达式结束捕获字符串

时间:2015-10-26 11:59:38

标签: regex

任何人都可以告诉我为什么这个正则表达式:

(<\s*script\s*>.*<\s*\/*script\s*>)

匹配整行:

<  script  >  some more javascript</script>     ggg     <script>

2 个答案:

答案 0 :(得分:1)

\ / 替换 \ / *

\ / * 匹配 0 或更多“/".

答案 1 :(得分:1)

你有两个问题:

  1. 首先是一个简单的错误,您使用'/'量词使终止开关与0个或更多*个字符匹配。你可以通过删除量词来解决这个问题。 要求单个终止开关,将正则表达式更改为:(<\s*script\s*>.*<\s*\/script\s*>)
  2. 但其次,因为.*是贪婪的。这意味着它可以尽可能多地抓取,同时仍然匹配正则表达式的其余部分。在这种情况下:<\s*\/*script\s*>。这意味着如果你在一行上有多个&#34; ...&lt; \ script&gt;&#34; s它将匹配整行,而不是每个&#34; ...&#34;。
  3. 您想要的是将任何字符匹配为次。这叫做懒惰匹配。在您的示例中,您可以使用?限定任何量词来完成此操作:

    .*?
    

    使用你的正则表达式将成为:

    (<\s*script\s*>.*?<\s*\/script\s*>)
    

    如果您实际使用http://www.regexr.com&#34;参考&#34;用于构建正则表达式的菜单,您可以在&#34;量词和交替&#34;&gt;&#34;懒惰&#34;

    下找到