我的代码要分析大量的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.不知道如何解释和处理这个问题?
最直观的感觉是(.*)有一些不能匹配的东西?
其中一步是获取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.不知道如何解释和处理这个问题?
最直观的感觉是(.*)有一些不能匹配的东西?
取group 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
我就结贴了.