教程集 www.jiaochengji.com
教程集 >  脚本编程  >  php  >  正文 正则表达式(. ?)与(.*)区别

正则表达式(. ?)与(.*)区别

发布时间:2016-10-27   编辑:jiaochengji.com
教程集为您提供正则表达式(. ?)与(.*)区别等资源,欢迎您收藏本站,我们将为您提供最新的正则表达式(. ?)与(.*)区别资源
昨天碰到的问题,在BBs问了得出的答应如下./(. ?)b/is 是非贪婪模式 匹配ab /(.*)b/is 是贪婪模式 匹配abb,

昨天碰到的问题,在BBs问了得出的答应如下./(. ?)b/is  是非贪婪模式 匹配ab /(.*)b/is 是贪婪模式 匹配abb,

那么我们来看看基本的符号说明:

*                                0次、1次或多次匹配其前的原子
                                1次或多次匹配其前的原子
?                                0次或1次匹配其前的原子
.                                匹配除换行之外的任何一个字符

再看看简单的例子:

你测试. ?和.*当然看不出区别了
测试这个字符串看看
'aaa<div style="font-color:red;">123456</div>bbb'
<. ?>会匹配<div style="font-color:red;">和</div>
<.*>会匹配<div style="font-color:red;">123456</div>

最后看看高手怎么说的.

(. )默认这是贪婪匹配
贪婪是先看整个字符串是否匹配, 如果不匹配,它会去掉字符串的最后一个字符, 并再次尝式, 如果还不匹配, 那么再去掉当前最后一个, 直到发现匹配或不剩任何字符.
过程大概这样:
$str='abcdabceba'
/. b/  // 匹配一个或多个任意字符后面跟一个字母 b

第一次(先看整个字符串是否是一个匹配) abcdabceba 不匹配,然后去掉最后一个字符 a
第二次(去掉最后一个字符后再匹配) abcdabceb  正确退出

惰性是从左侧第一个字符开始向右匹配, 先看第一个字符是不是一个匹配, 如果不匹配就加入下一个字符再尝式匹配, 直到发现匹配...
过程大概这样
$str='abcdabceba'
/. ?b/ // 同样匹配一个或多个任意字符后面跟一个字母 b

第一次(读入左侧第一个字符) a 不匹配加一个再式
第二次 ab  匹配记录下来,继续(如果匹配所有的话,比如 preg_match_all, 或preg_replace, 不是所有到这儿就停了
第三次 c
...
cdab  匹配记录下来,继续
...
ceb  匹配记录下来,继续

a 到最后了没有了退出


简单例子:
<?php
//这里因为没有用all, . ?只匹配一次

        
$str='abcdabceba';
        
preg_match('/. b/', $str, $s);
        echo
$s[0]; // abcdabceb
        
        
echo"   ";
        
preg_Match('/. ?b/', $str, $s);
        echo
$s[0]; // ab
        
        
echo"   ";
        
preg_Match('/. b/U', $str, $s); //等同于 /. ?b/
        
echo $s[0]; //ab
?>

您可能感兴趣的文章:
探讨:Javascript RegExp 对象
php正则表达式转义字符的例子
php中&&和||的区别是什么
Python re正则表达式模块及其用法
正则表达式使用详解
伸手党必备之Python正则表达式常用函数
常用正则表达式的例子
php正则表达式完全教程二
正则表达式处理函数 preg_match,preg_match_all
正则表达式在网络编程中的运用

[关闭]
~ ~