Perl中的正则表达式可能有多个匹配项

时间:2019-05-24 08:04:21

标签: regex perl regex-greedy

我是Perl的新手,正在使用正则表达式。当给定查询字符串可能有多个匹配项时,我无法决定Perl如何解决正则表达式匹配项的歧义。例如

  • ('hellohellohello' =~ m/h.*o/)

    这可以匹配“ hello”,“ hellohello”或“ hellohellohello”。它会选择哪一个-最短或最大的匹配?如果我们想要相反的行为(例如默认情况下是找到最短的匹配项然后找到最大的匹配项),该怎么办?

  • 如果第一个答案最大,请考虑

    ('hello hellohello' =~ m/h.*o/)

    此处,它可以从第一行(在换行符之前)或第二行(在换行符之后)匹配-第一对最大匹配。它会使用哪一个?

可用于确定字符串的哪个子字符串匹配给定正则表达式的完整规则集是什么(可能是示例中提到的可能找到多个匹配项的情况除外)?

1 个答案:

答案 0 :(得分:1)

*很贪婪,因此它会尝试匹配尽可能长的字符串,只要该模式的其余部分仍然可以匹配。因此它将匹配hellohellohello

如果改用*?,则它会变得非贪婪,并且它将匹配最短的字符串,只要其余模式都匹配即可。因此m/h.*?o/将与hello相匹配。