首页 文章

正则表达式在第一场比赛时停止

提问于
浏览
396

我的正则表达式看起来像

<xxxx location="file path/level1/level2" xxxx some="xxx">

我只对分配给位置的报价部分感兴趣 . 如果没有贪婪的开关,它不应该像下面那么容易吗?

/.*location="(.*)".*/

似乎没有用 .

6 回答

  • 5

    使用没有全局标志的Lazy量词 ? 就是答案 .

    例如,

    如果你有全局标志 /g 那么它将匹配所有最低长度匹配,如下所示 .

  • 26

    怎么样

    .*location="([^"]*)".*
    

    这样可以避免使用 . *进行无限制搜索,并且与第一个引号完全匹配 .

  • 829

    location="(.*)" 将在 some="xxx 之后的“ location= 之后”匹配,除非你让它变得非贪婪 . 因此,您需要 .*? (即使其非贪婪)或更好地用 [^"]* 替换 .* .

  • 16

    您需要使正则表达式非贪婪,因为默认情况下, "(.*)" 将匹配 "file path/level1/level2" xxx some="xxx" 的所有内容 .

    相反,你可以让你的点星非贪婪,这将使它尽可能少的字符匹配:

    /location="(.*?)"/
    

    在量词( ?*+ )上添加 ? 使其非贪婪 .

  • 45

    如果您的引擎支持,请使用非贪婪匹配 . 加?在捕获内部 .

    /location="(.*?)"/
    
  • 0

    因为您正在使用量化的子模式,并且如Perl Doc所述,

    默认情况下,量化的子模式是“贪婪的”,也就是说,它将尽可能多地匹配(给定一个特定的起始位置),同时仍然允许模式的其余部分匹配 . 如果您希望它与可能的最小次数匹配,请使用“?”跟随量词 . . 请注意,含义不会改变,只是“贪婪”:

    *?        //Match 0 or more times, not greedily (minimum matches)
    +?        //Match 1 or more times, not greedily
    

    因此,要允许您的量化模式进行最小匹配,请按 ? 进行操作:

    /location="(.*?)"/
    

相关问题