可能重复:
在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组将是"我认为你的".
如果(.*)
正则表达式中没有任何内容,那么绝对没有区别.但是,如果有是什么之后,则是有区别的:
"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)