我可以使用一些正则表达式的帮助

时间:2010-12-20 02:35:42

标签: regex

编辑:我正在寻找的是一份REGEX声明,上面写着:

  • 抓住以div class ='productBundle'开头的行以.html结尾。
  • 抓住所有这些(我认为这叫做贪婪)

我将这些存储在一个数组中,然后我将获取这些页面。对于每个页面,我将需要获取图像URL,因此我需要正则表达式代码。我知道它很脆弱,但它会完成我所需要的工作。

我有一个html页面,包含以下组:

<div class='productBundle' id='4086472'>
<table cellpadding="0" cellspacing="0" class='inv'>
<tr><td valign="middle" align="center" width="100%">
<a href="http://listing.com/product/view/4086794.html" alt="472">

我想检索div class ='productBundle'下列出的所有网址。每页可以有任意数字,但总是在productBundle div。

然后从那些html页面,我需要获得产品图片网址

<img id=productImage' src='http://listing.com/item/472248/472.jpg'>

例如,我需要上面的html代码中的“http://listing.com/item/472248/472.jpg”。

我可以使用REGEX代码的帮助来获取第一部分中的页面,然后使用REGEX代码从productImage中获取URL。

由于

5 个答案:

答案 0 :(得分:3)

不,你需要帮助的是处理标记语言,正则表达式就像用螺丝刀敲钉一样。

换句话说,你可以让它发挥作用,但要抓住所有边缘情况需要付出相当大的努力。

我的建议是使用XML处理工具,其选择取决于您正在使用的语言和环境。

答案 1 :(得分:1)

你应该真的使用XPath代替。将文档加载到框架提供的支持XPath的任何容器中,并发出以下查询:

//div[@class='ProductBundle']//img/@src

结果将是您需要的字符串列表。

答案 2 :(得分:1)

考虑: RegEx match open tags except XHTML self-contained tags


编辑以添加有用的内容: 那就是说,这很脆弱,但应该有用......

获取.html网址的Perl:

$/ = undef; # read multiline
$in = <>;   # read file provided on command line
while ($in =~ s/<div class='productBundle'.*?<a href=\"(.*?html)//sm) {
  print "$1\n";
}

用于抓取.jpg网址的Perl:

$/ = undef; # read multiline
$in = <>;   # read file provided on command line
while ($in =~ s/<img id='productImage'.*?src='(.*?jpg)//sm) {
  print "$1\n";
}

.*?表示匹配0个或多个字符不贪心,这意味着它只会匹配第一个出现后的任何内容。最后的/sm修饰符告诉perl .也应该匹配换行符(默认情况下它不匹配)并且输入是多行的。

答案 3 :(得分:0)

HTML Parser,它生成XML表示+ XPATH。

  1. 选择HTML parser for your particular language that produces an XML representation
  2. 使用产品列表隐藏HTML并使用此XPath语句//div[@class='productBundle']//a/@href查找HREF。
  3. 迭代结果 - HTTP GET每个href值
  4. 对于每个href值 - XPath再次使用解析器对图像路径//img/@src进行响应。

答案 4 :(得分:0)

这就是诀窍。

“HTTP:\ / \ / listing.com \ /产物+([^” “])* HTML”