如何在clojure重新模式中打开/关闭贪婪?
(re-find #"(.+)-(.+)" "hello-world-you") => ["hello-world-you" "hello-world" "you"]
Run Code Online (Sandbox Code Playgroud)
VS
(re-find #"(.+)-(.+)" "hello-world-you") => ["hello-world-you" "hello" "world-you"]
Run Code Online (Sandbox Code Playgroud)
Bri*_*and 18
该?
品牌量词,如+
,非贪婪.默认情况下,它们是贪婪的.
(.+)
(.+?)
顺便说一句,这只是直接,简单和重点的答案.@ fge的回答表明了更好的方法.检查出未来的表达方式.
fge*_*fge 12
不要使用.+
,使用补充的角色类:这可以避免必须关心贪婪.
你应该把它用作正则表达式:([^-]+)-([^-]+)
.
始终尽力确保您的输入合格.在这里,你希望匹配一次或多次不是短划线的所有内容,然后捕获它(([^-]+)
),然后是破折号(-
),然后(再次)捕获所有不是破折号的东西,一次或多次,并捕获它(([^-]+)
).
如果你知道你可以在不依赖它的情况下描述你的输入,那么依靠量词的(非)贪婪是一个根本性的错误.它不仅是错误的来源(正如您自己演示的那样),它也是正则表达式引擎以最高效率运行的障碍.