我正在尝试创建一个用于报废的正则表达式生成器,任何指导都值得赞赏。
我们的想法是,我们有一个大文本 (html),我们选择 2 个(至少)始终相似的 DOM 元素(例如来自 google 的前 2 个结果),然后我们应该生成一个正则表达式来抓取(匹配)这个结果。
示例:选定元素 1(这将由用户输入):
<a onmousedown="return rwt(this,'','','','1','AFQjCNHqQo9TrXtXXM5lDpiCmNQO9xwkhw','','0CGoQFjAA',null,event)" class="l" href="http://www.miniclip.com/"><em>Games</em> at Miniclip.com - Play Free Online <em>Games</em></a>
选定的元素 2(这将由用户输入):
<a onmousedown="return rwt(this,'','','','2','AFQjCNGlNySkvcXMxEUmjCMOJRQPCdqBHQ','','0CHIQFjAB',null,event)" class="l" href="http://www.games.com/"><em>Games</em>.com: Play <em>Games</em> Online - Free <em>Games</em>, Download <em>Games</em> <b>...</b></a>
包含这两个元素的 HTML 文本:
<ol id="rso" eid="GcrGT_KHH4f3sgbXmci5Cw"><!--m--><li class="g"><div sig="U8P" bved="0CBUQkQo" pved="0CBQQkgowAA" class="vsc"><h3 class="r"><a onmousedown="return rwt(this,'','','','1','AFQjCNHqQo9TrXtXXM5lDpiCmNQO9xwkhw','','0CGoQFjAA',null,event)" class="l" href="http://www.miniclip.com/"><em>Games</em> at Miniclip.com - Play Free Online <em>Games</em></a></h3><div class="vspib" aria-label="Detalii rezultat" role="button" tabindex="0">
</div></div></div><!--n--></li><!--m--><li class="g"><div sig="fUe" bved="0CBsQkQo" pved="0CBoQkgowAQ" class="vsc"><h3 class="r"><a onmousedown="return rwt(this,'','','','2','AFQjCNGlNySkvcXMxEUmjCMOJRQPCdqBHQ','','0CHIQFjAB',null,event)" class="l" href="http://www.games.com/"><em>Games</em>.com: Play <em>Games</em> Online - Free <em>Games</em>, Download <em>Games</em> <b>...</b></a></h3><div class="vspib" aria-label="Detalii rezultat" role="button" tabindex="0">
在这种情况下,好的正则表达式是:
(<h3 class="r">)(.*?)(</h3><div)
不难弄清楚。当<h3 class="r">
出现在与我们的结果无关的另一个元素中时,就会出现问题。例如,如果您添加:
<h3 class="r">THIS IS JUST AN EXTRA THING</h3>
在 HTML 文本的开头,上面的正则表达式不起作用。
新的正则表达式需要:
(class="vsc"><h3 class="r">)(.*?)(</h3><div)
我知道这不是一件容易实现的事情,但我的想法是找到元素的相似之处(例如,在元素前后取 100 个字符,看看元素 1/元素 2 的相同点)。
希望有人可以指导我实现这一目标的最佳方法。
提前致谢