2014-04-01 08:49



I know perl style regular expresions fairly well, but today I found one that I do not understand:

preg_match('/^On.+?wrote:.+?$/i',$line); //reduced example

What does the .+? mean? I undarstand the .+ alone, I understand .? alone. But .+?? It seems a bug to me.

The line should match popular citation prefixes in the email body and it is much more complicated along with look behinds, but this is the only part i can't understand, and still the regexp seems to work correclty.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答


  • dongqiao1158 dongqiao1158 7年前

    + means one or more and is greedy. +? means the same, it just is not greedy like usual regex are.

    Edit: I wanted to explain it a little further, but the comment of deceze already explains enough.^^

    点赞 评论 复制链接分享
  • dongmu1914 dongmu1914 7年前

    Lazy not Greedy

    .+? matches any character (except newline)

    Quantifier: Between one and unlimited times, as few times as possible, expanding as needed [lazy]

    check at

    点赞 评论 复制链接分享
  • douzhuangxuan3268 douzhuangxuan3268 7年前

    In short, when you add ? its matching least amount possible, where as without ? its matching most amount possible:

    Here is the explanation:

    NODE                     EXPLANATION
      .+?                      any character except 
     (1 or more times
                               (matching the least amount possible))
      .+                       any character except 
     (1 or more times
                               (matching the most amount possible))
    点赞 评论 复制链接分享