Php 正则表达式中的问号
我看到这个正则表达式在url上执行:Php 正则表达式中的问号,php,regex,Php,Regex,我看到这个正则表达式在url上执行: $url = 'http://www.domain.com/'; preg_match('/(http)(.*?)\n/', $url, $matches); 我不确定问号“?”在这个正则表达式中的用法。根据正则表达式手册,“?”是一个元字符,相当于{0,1}。那么,在*后面加“?”有什么意义呢?因为*已经表示{0,} 谁能给我点化一下吗。谢谢。在这种情况下,问号表示“吝啬”匹配。它将在遇到第一个\n时立即停止匹配,否则,它将吞噬介入的\n直到最后一个 更
$url = 'http://www.domain.com/';
preg_match('/(http)(.*?)\n/', $url, $matches);
我不确定问号“?”在这个正则表达式中的用法。根据正则表达式手册,“?”是一个元字符,相当于{0,1}。那么,在*后面加“?”有什么意义呢?因为*已经表示{0,}
谁能给我点化一下吗。谢谢。在这种情况下,问号表示“吝啬”匹配。它将在遇到第一个
\n
时立即停止匹配,否则,它将吞噬介入的\n
直到最后一个
更多关于贪婪和吝啬匹配的信息,请参见当它跟在另一个量词后面时,它有不同的含义 在这种情况下,它会改变前面量词的匹配行为。默认行为是贪婪的,
?
将其更改为“ungreedy”
- “贪婪”意味着尽可能地匹配
- “Ungreedy”指尽可能少的匹配
a.+b
将匹配aabxb
a.+?b
将只匹配aabxb
参见示例
您可能会对我关于此主题的博文感兴趣:
关于您的正则表达式
preg_match('/(http)(.*?)\n/', $url, $matches);
我不认为这有什么区别。默认情况下,
匹配除换行符以外的任何字符(您可以通过在结束正则分隔符后添加一个s
来更改此设置),因此,如果问号是否存在,它将只匹配到第一个\n
如果使用
preg_match('/(http)(.*?\n/s'),$url,$matches)更改行为代码>,它将带来不同*\n
将匹配到最后一个\n
和*?\n
将在第一个\n
检查一下……可能会有帮助@Dikku,这个问题完全无关。@tonytz,不客气,我还为您的特殊情况添加了解释。啊,我明白了。添加的解释也非常有用-事实上,它解决了文件末尾的行时的问题!