本帖最后由 jiangsheng 于 2010-01-31 22:50:24 编辑

解决方案 »

  1.   


    您好,我并不清楚。稍微查阅了下尝试以
    <p>(\d+\.\d+)(?<\.)(.*?)</p>
    但却是错的。
    包括<p>(\d+\.\d+)(?!\.)(.*?)</p>继续GOOGLE中……如果可以,您能否施教一二?
      

  2.   

    最简单的改法<p>(\d+\.\d+)[^\d.](.*?)</p>
      

  3.   

    <p>(\d+\.\d+)[^\d\.](.*?)</p>感觉有点别扭,但确实是匹配了。
      

  4.   

    <p>5.10.1 你好中国 </p> <p>(\d+\.\d+)[^\.](.*?)</p> 
      

  5.   

    <p>(\d+\.\d+)[^\.](.*?) </p>
    可是难道不包括<p>5.10.1 你好中国 </p>

    只匹配一个 1?
      

  6.   

    <p>(\d+\.\d+)[^\d.](.*?)</p>
    这个为什么可以,楼主的正则为什么不可以,解释起来会有些麻烦,需要理解什么是回溯.NET正则表达式用的是传统NFA引擎,NFA引擎最大的特点就是回溯
    而这里的正则同时也涉及到了贪婪与非贪婪模式从原理上讲可能需要说很多,先从应用上说说吧
      

  7.   

    贪婪与非贪婪.*

    .*?匹配<p>.*</p>
    <p>aaaa</p>bbbbb</p><p>.*?</p>
    <p>aaaa</p>bbbbb</p>这个理解不难。就是那啥子【回朔】有点脑子转不过来
      

  8.   

    正则表达式匹配,以匹配成功为大前提,能匹配成功,才有资格去谈什么贪婪与非贪婪的楼主的正则:<p>(\d+\.\d+)[^\.](.*?)</p> 
    源字符串:<p>5.10.1  你好中国</p> 先插一句,[^\.],在字符组中的小数点是不需要转义的,[^.]即可
    第二个\d+确实是先匹配了10,这时由[^.]来匹配接下来的小数点,匹配失败,这时就需要第二个\d+进行回溯,让出已匹配的0,由[^.]匹配0,再由.*?来匹配接下来的小数点,以及后面的内容,这样整个表达式才能匹配成功所以是由[^.]匹配了0,由.*?匹配了.1  你好中国
      

  9.   

    至于回溯,简单点说,就是不定长度量词,在匹配时,会先记录回溯状态,一旦之前的匹配导致整个表达式匹配不成功,就是进行回溯,贪婪模式让出之前已匹配的内容,非贪婪模式去匹配之前未匹配的内容,以使整个表达式能够匹配成功之前整理过这样一篇博客,做了一个falsh来讲解回溯,只不过CSDN的博客中不能插入flash,所以就没有发出来,其实回溯还是挺好理解的,不过也不是一两句话就能说清楚的,后面整理一下发到博客里吧
      

  10.   


    必要条件:
    凌晨前他出现过
    他有权限充分条件:
    不是你改的
    昇哥是客观唯心主义者ps:我甚至猜测昇哥信得就是如来否则
    呵呵,这个证据倒是不充分
    要是oj突然蹦出来说他改的,我就囧了
    我闪了,睡觉
      

  11.   

    <p>(\d+\.\d+)(.*?)</p> 可以匹配所有的
      

  12.   

    <p>\d+(\.\d+)\1*?</p>
    可以匹配楼主所有例子,楼主可试试
      

  13.   

    <p>(\d+\.\d+)(.*?) </p> ok?