我的代码要分析大量的html文件(10万级),每个文件中字符串<!--this-is-text-->都出现两次,
其中一步是获取html文件中两个<!--this-is-text-->之间的内容.我用的方法是string str = new Regex("<!--this-is-text-->(.*)<!--this-is-text-->").Match(content).Groups[1].Value
但是在大量文件中跑这段代码,大概有几百个文件,获取不了内容,经过手工检查html文件的源代码,html源代码中确实都出现了两次<!--this-is-text-->
对有问题的文件,用new Regex("<!--this-is-text-->").Matches(content).Count返回的结果也是2.不知道如何解释和处理这个问题?
最直观的感觉是(.*)有一些不能匹配的东西?

解决方案 »

  1.   

    (?is)(<!--this-is-text-->)([^<!>]*)\1
    取group 2的值
      

  2.   

    ...
    1楼的贪婪模式就一次性匹配到最后去了
    2楼的方法中间有<!就被截断了,大多情况应该是失配。try
    (?is)(<!--this-is-text-->)(.+?)\1
    取分组2
    尽量在求效率的时候少用环视,tim猫猫是想写
    (?is)(<!--this-is-text-->)(((?!<!).)*)\1
    这样把。这样效率会慢一些。
    即便如此,还有一个简化写法.
    (?isn)(<!--this-is-text-->)(?<data>((?!\1).)*)\1
    取data分组内容就效率,还是不用环视快,毕竟是10w级的这么多文件
    (?is)(<!--this-is-text-->)(.+?)\1
      

  3.   

    楼主说的每个文件中只有两个<!--this-is-text-->。。贪婪不是很好么。。
      

  4.   

    to wuyazhe:对我的需求,贪不贪婪无所谓.经过测试,果然如XiXiHaHa_XiXiHaHa所说.
    我就结贴了.