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

若如初见. 提交于 2020-02-26 00:40:08

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

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

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

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

似乎不起作用。


#1楼

怎么样

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

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


#2楼

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

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

/location="(.*?)"/

添加? 量词( ?*+ )上的字符会使它变得非贪婪。


#3楼

如果您的引擎支持,请使用非贪婪匹配。 添加? 里面的捕获。

/location="(.*?)"/

#4楼

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


#5楼

使用惰性量词? 没有全局标志的答案。

例如,

如果您具有全局标志/g ,则它将与所有最低长度的匹配项匹配,如下所示。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!