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

我的正则表达式模式看起来像


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

我只对分配给位置的引号感兴趣。如果没有贪婪的开关,这岂不是像下面一样容易吗?


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

似乎不起作用。


慕田峪4524236
浏览 491回答 3
3回答

蝴蝶不菲

您需要将正则表达式设为非贪婪,因为默认情况下,"(.*)"它将匹配所有"file path/level1/level2" xxx some="xxx"。相反,您可以使点星不贪心,从而使其与尽可能少的字符匹配:/location="(.*?)"/添加?一个量词(?,*或+)使它非贪婪。

慕妹3146593

location="(.*)"除非您将其设为非贪婪location=,some="xxx否则它将从“之后”&nbsp;到“之后”&nbsp;匹配。因此,您要么需要.*?(即使其变得非贪婪),要么更好地替换.*为[^"]*。

喵喵时光机

因为您使用的是量化子模式,并且如Perl Doc中所述,默认情况下,量化的子模式为“ 贪婪 ”,也就是说,它将匹配尽可能多的次数(给定特定的起始位置),同时仍允许其余模式匹配。如果希望它 与最小次数匹配,请在量词 后面加上 “?” 。请注意,含义没有改变,只是“贪婪”:*?&nbsp; &nbsp; &nbsp; &nbsp; //Match 0 or more times, not greedily (minimum matches)+?&nbsp; &nbsp; &nbsp; &nbsp; //Match 1 or more times, not greedily因此,要使您的量化模式达到最小匹配,请遵循?:/location="(.*?)"/
打开App,查看更多内容
随时随地看视频慕课网APP