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