我的正则表达式模式看起来像<xxxx location="file path/level1/level2" xxxx some="xxx">我只对分配给位置的引号感兴趣。如果没有贪婪的开关,这岂不是像下面一样容易吗?/.*location="(.*)".*/似乎不起作用。
3 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
您需要将正则表达式设为非贪婪,因为默认情况下,"(.*)"它将匹配所有"file path/level1/level2" xxx some="xxx"。
相反,您可以使点星不贪心,从而使其与尽可能少的字符匹配:
/location="(.*?)"/
添加?一个量词(?,*或+)使它非贪婪。
慕妹3146593
TA贡献1820条经验 获得超9个赞
location="(.*)"
除非您将其设为非贪婪location=
,some="xxx
否则它将从“之后” 到“之后” 匹配。因此,您要么需要.*?
(即使其变得非贪婪),要么更好地替换.*
为[^"]*
。
喵喵时光机
TA贡献1846条经验 获得超7个赞
因为您使用的是量化子模式,并且如Perl Doc中所述,
默认情况下,量化的子模式为“ 贪婪 ”,也就是说,它将匹配尽可能多的次数(给定特定的起始位置),同时仍允许其余模式匹配。如果希望它 与最小次数匹配,请在量词 后面加上 “?” 。请注意,含义没有改变,只是“贪婪”:
*? //Match 0 or more times, not greedily (minimum matches)
+? //Match 1 or more times, not greedily
因此,要使您的量化模式达到最小匹配,请遵循?:
/location="(.*?)"/
- 3 回答
- 0 关注
- 522 浏览
添加回答
举报
0/150
提交
取消