问题描述
怎么用一个正则查询文本段落中出所有链接id="top"到id="bottom"之间的内容里的href="xxx"(?<=id="top")[rsS]+(?=id="bottom")用这个可以找出段落范围,但是要怎么才能在这个范围内再找出链接呢?本来想这样写的(?<=id="top"[rsS]+href=")[^"]+(?="[rsS]+]id="bottom")但是毫无疑问会死机
解决方案
解决方案二:
id="top"跟id="top"对于html来说是一样的,而你的所谓正则根本没有包括这种“有一个空格”的情况。要分析html,不是靠匹配你自己发明词法规则,而是先要使用一个html语法分析库对文本进行语法分析,了解了这种程序输出的hemlelements语法树结构,然后才能分析。
解决方案三:
heml->html学生在课堂作业上“玩一玩儿”也就算了。但是对于实际产品开发人员,我们根本不能相信那种依据正则来妄自代替语法分析的程序,那种程序以后就会发现是是浪费了开发费了。在你针对的目标html页面中,他的开发人员程序员可能每隔2、3天就上线一个改动过的版本。在不同版本之间,他知道id="top"跟id='top'是同一个东西,也就是双引号跟单引号是同一个东西,都是能够通过他们上线之前的人工或者自动化测试的。但是如果把单引号之间的id值修改了就不行、就无法通过测试。因此开发网页的程序员知道什么是肯定可以变化的,什么是不变的。如果你分析人家输出的html,连什么是经常可变的都不知道,简单地匹配字眼儿,连双引号改成了单引号这种情况都不能识别,这种程序就根本不是我们所能够接受的、一个正规的程序员写出来的程序。只知道依靠“正则”的程序是不行的。
解决方案四:
说简单点就是用正则取出网页内容中的所有链接但是不包含顶部top的链接和底部bottom的链接,只匹配内容中的链接现在的要求是就用一个正则匹配出满足要求的链接,不能说用第一个正则先找内容再用第二个正则找链接这样的做法可怜的程序员要求从制定的1000多个小购物站中抓取出20万条包含内链接且相仿的内容并分类