Php (*)和(*)之间的差异

Php (*)和(*)之间的差异,php,regex,Php,Regex,可能重复: 我知道在正则表达式中,*、+或之后的问号?表示ungreedy,但如果要匹配任何字符,使用(.*)或(.*)有什么区别 谢谢 编辑: 在我的例子中,我想检查一个URL。两者的区别是什么 http://site\.net/(.*?)\.html 及 ?*是贪婪的,这意味着它将忽略正则表达式的下一个分隔符,直到它本身未满足为止,除非*后面的正则表达式紧靠目标字符串的末尾 *?是ungreedy,这意味着如果下一个分隔符被满足,它将进入正则表达式的下一个分隔符。它将继续到下一个分隔符,

可能重复:

我知道在正则表达式中,*、+或之后的问号?表示ungreedy,但如果要匹配任何字符,使用(.*)或(.*)有什么区别

谢谢

编辑: 在我的例子中,我想检查一个URL。两者的区别是什么

http://site\.net/(.*?)\.html


*
是贪婪的,这意味着它将忽略正则表达式的下一个分隔符,直到它本身未满足为止,除非
*
后面的正则表达式紧靠目标字符串的末尾

*?
是ungreedy,这意味着如果下一个分隔符被满足,它将进入正则表达式的下一个分隔符。它将继续到下一个分隔符,即使它本身仍然适用

例如:

/(*)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"

正如你已经知道的,不礼貌的行为是什么,我不会再解释了

这取决于
(.*?
)之后的内容-这就是不受约束的行为

有趣的是,这意味着格式为
/(.*)/
的正则表达式没有多大意义——因为如果你匹配所有的东西,你怎么会懒惰呢

例如,如果您试图在中创建这个正则表达式,它甚至不会编译,因为这是胡说八道

只有当你把一些东西放在小组后面,你的正则表达式才有意义。我不确定是否所有的rege引擎都和这里的Regexr一样,并且拒绝接受这个regex

因此,如果要匹配某个字符之前的任何内容,必须将该特定字符放在ungreedy anything组之后。这样,在匹配特定角色之前的所有内容


得出结论;如果组后面没有任何内容,则没有任何区别。

假设您得到以下url:

http://example.net/some/wierd/path.html?returnTo=somedoc.html
贪婪将匹配整行:

http://example.net/some/wierd/path.html?returnTo=somedoc.html
而非贪婪回报:

http://example.net/some/wierd/path.html

非常适合尝试正则表达式

*另请参见和,以获取一些可以分析和解释给定模式的有用工具,或获得更好的教程。@Matteo:为您的示例添加了解释这并不能回答问题。他已经说过他知道a
会使正则表达式不可用是的,我想要一个例子……谢谢。。。现在我明白了。
http://example.net/some/wierd/path.html