(.*)和(.*?)之间的差异

mco*_*ont 2 php regex

可能重复:
在regexp中懒惰和贪婪意味着什么?

我知道在正则表达式中*,+或?之后的问号 意味着不合适,但如果我想匹配任何字符,使用(.*)或(.*?)之间的区别是什么?

谢谢.

编辑:在我的情况下,我想检查一个URL.有什么区别

http://site\.net/(.*?)\.html
Run Code Online (Sandbox Code Playgroud)

http://site\.net/(.*)\.html
Run Code Online (Sandbox Code Playgroud)

FTh*_*son 19

.*是贪婪的,这意味着它将忽略你的正则表达式的下一个分隔符,直到它本身未被满足,除非正则表达式跟随.*目标字符串的末尾.

.*?是不合适的,这意味着如果下一个完成,它将进入你的正则表达式的下一个分隔符.它将继续进入下一个分隔符,即使它本身仍然适用.

例:

/(.*) dog/ 将匹配"我认为你的狗咬我的狗"和第1组将是"我认为你的狗咬我的".

/(.*?) dog/ 将匹配"我认为你的狗咬我的狗"和第1组将是"我认为你的".


Gar*_*eth 6

如果(.*)正则表达式中没有任何内容,那么绝对没有区别.但是,如果有什么之后,则是有区别的:

"I went to the shops and then I went home"

/(.*) went/  => "[I went to the shops and then I] went"
/(.*?) went/ => "[I] went"
Run Code Online (Sandbox Code Playgroud)