为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪4524236 2019-10-04 14:43:54
我的正则表达式模式看起来像<xxxx location="file path/level1/level2" xxxx some="xxx">我只对分配给位置的引号感兴趣。如果没有贪婪的开关,这岂不是像下面一样容易吗?/.*location="(.*)".*/似乎不起作用。
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

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


相反,您可以使点星不贪心,从而使其与尽可能少的字符匹配:


/location="(.*?)"/

添加?一个量词(?,*或+)使它非贪婪。


查看完整回答
反对 回复 2019-10-04
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

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


查看完整回答
反对 回复 2019-10-04
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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


默认情况下,量化的子模式为“ 贪婪 ”,也就是说,它将匹配尽可能多的次数(给定特定的起始位置),同时仍允许其余模式匹配。如果希望它 与最小次数匹配,请在量词 后面加上 “?” 。请注意,含义没有改变,只是“贪婪”:


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

+?        //Match 1 or more times, not greedily

因此,要使您的量化模式达到最小匹配,请遵循?:


/location="(.*?)"/


查看完整回答
反对 回复 2019-10-04
  • 3 回答
  • 0 关注
  • 486 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信