[问题] 没有 End tag的字串撷取问题

楼主: cptl (James)   2015-06-25 17:59:09
/* 听说注明使用的语言、环境
* 问题有可能较容易被解决...
*/
请教一个问题, 一般在撷取html内容时, 都有明确的起始与结束tag
例如像是 <html>, </html>, <body>, </body>...等
我们可以在正规表示法里直接指定开始与结束的tag,
例如我们想抓取 <script...> 和 </script> 的内容时,
可以使用下列表示法:
(?s)<script\s.*?</script>
就能正确将<script ...> 和 </script> 的内容正确找到.
但假如我手上的资料并没有明确的结束tag, 如下所示:
===Section1===
line A
line B
===Section2===
line C
line D
===Section3=======
line E
line F
能知道的是, 当我们遇到一个 "===Section\d====" 开头的字串时,
就代表是一个新的section起始位置
想请问的是, 我们有什么办法能够撷取出一个section开头到
下一个section间的全部内容?
我能想到的是利用 lookahead 的(?!...) 来判断是否己经遇到
下一个section起始位置, 如果遇到下一个section开头, 就表示
己经抓到这个section的全部内容, 可以停止比对了
只是目前仍然无法试成功, 底下是我用的方法:
测试: (?s)===Section\d===.*?(?!===Section\d===)
=> 失败, 只能比对出每个section的开头, 无法抓出各个section的内容
测试: (?s)===Section\d===.*(?!===Section\d===)
=> 失败: 一口气比对出全部的内容
测试: ===Section\d===[\w\W]+(?!===Section\d===)
=> 失败, 一口气比对出全部的内容
请教是哪边有问题呢?
是我使用lookahead的方法有错吗?
谢谢
测试环境: Windows 7 + Notepad++
作者: mars90226 (火星人)   2015-06-25 23:06:00
===Section\d+===[\w\W]+?(?====Section\d+===).不会match换行,lookahead (?!是否定的,要用(?=\d+比较好,除非你的数字只有1位数
楼主: cptl (James)   2015-06-26 00:25:00
原来对于 (?!) 的理解错误, 非常感谢指教

Links booklink

Contact Us: admin [ a t ] ucptt.com