Regex 查找某个类的所有URL,直到页面上出现文本为止

Regex 查找某个类的所有URL,直到页面上出现文本为止,regex,html-parsing,Regex,Html Parsing,我目前正在构建一些东西来查看易趣拍卖,但我很难阻止它在“更多相关物品”之后包含这些物品,而我显然不想要这些物品 目前,所有链接都是标准的a href,布局如下 <a href="http://www.ebay.co.uk/blahblah" class="vip" title="x" itemprop="name"> class=“vip”出现在每个项目链接中,因此使用它似乎是一件好事,但是它也出现在相关项目的链接中,因此我不需要再进一步讨论与零件相关的更多项目 它必须是正则表

我目前正在构建一些东西来查看易趣拍卖,但我很难阻止它在“更多相关物品”之后包含这些物品,而我显然不想要这些物品

目前,所有链接都是标准的a href,布局如下

<a href="http://www.ebay.co.uk/blahblah" class="vip" title="x" itemprop="name">

class=“vip”出现在每个项目链接中,因此使用它似乎是一件好事,但是它也出现在相关项目的链接中,因此我不需要再进一步讨论与零件相关的更多项目

它必须是正则表达式,因为我用ubot(比用真正的语言编写代码快得多)来实现它——很抱歉,对于noob这个问题,正则表达式无论如何都不是我的强项

谢谢!:)

描述 该正则表达式将:

  • 将所有锚定标记与
    vip的
    class
    属性匹配
  • 捕获这些锚定标记的
    href
    属性值
  • 将避免出现问题的边缘情况
  • 允许
    class
    href
    以任何顺序出现在锚定标记中
  • 更多信息浏览部分之后未捕获
(?=.*More\sto\sexplore)

PHP代码示例: 示例文本

注意,第二行有一些潜在的问题文本

<a href="http://www.ebay.co.uk/blahblah-11" class="vip" title="x" itemprop="name">text here</a>
<a onmouseover=' var class="vip"  ; funClassSwap(class); ' href="http://www.ebay.co.uk/blahblah-22"><form><input type="image" src="submit.gif"></form></a>
<a class="vip" href="http://www.ebay.co.uk/blahblah-33" title="x" itemprop="name">more text</a>
<div class="seoi-c">
    <h2 class="seoi-h">More to explore</h2>
    <div class="fl">
        <ul class="tso-u">
                <li><a href="http://www.ebay.com/sch/Lathes-/97230/i.html?_dcat=97230&amp;Type=CNC&amp;_trksid=p2045573.m2389" title="Lathes in Metalworking Equipment CNC">Lathes in Metalworking Equipment CNC</a></li>
        </ul>
    </div>
    <div class="fl">
        <ul class="tso-u">
        </ul>
    </div>
</div>
<a class="vip" href="http://www.ebay.co.uk/blahblah-44" title="x" itemprop="name">more text</a>

更多信息有待探索
代码

<?php
$sourcestring="your source string";
preg_match_all('/<a\b(?=\s) # capture the open tag
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\shref=(\'[^\']*\'|"[^"]*"|[^\'"][^\s>]*)) # get the href attribute
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\sclass=[\'"]?vip[\'"]?) # validate the class attribute
(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"\s]*)*"\s?> # get the entire tag
.*?<\/a>   # capture the entire anchor tag
(?=.*?More\sto\sexplore)  # validate this match is before the 'more to explore' section
/imsx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
说明
该正则表达式将:

  • 将所有锚定标记与
    vip的
    class
    属性匹配
  • 捕获这些锚定标记的
    href
    属性值
  • 将避免出现问题的边缘情况
  • 允许
    class
    href
    以任何顺序出现在锚定标记中
  • 更多信息浏览部分之后未捕获
(?=.*More\sto\sexplore)

PHP代码示例: 示例文本

注意,第二行有一些潜在的问题文本

<a href="http://www.ebay.co.uk/blahblah-11" class="vip" title="x" itemprop="name">text here</a>
<a onmouseover=' var class="vip"  ; funClassSwap(class); ' href="http://www.ebay.co.uk/blahblah-22"><form><input type="image" src="submit.gif"></form></a>
<a class="vip" href="http://www.ebay.co.uk/blahblah-33" title="x" itemprop="name">more text</a>
<div class="seoi-c">
    <h2 class="seoi-h">More to explore</h2>
    <div class="fl">
        <ul class="tso-u">
                <li><a href="http://www.ebay.com/sch/Lathes-/97230/i.html?_dcat=97230&amp;Type=CNC&amp;_trksid=p2045573.m2389" title="Lathes in Metalworking Equipment CNC">Lathes in Metalworking Equipment CNC</a></li>
        </ul>
    </div>
    <div class="fl">
        <ul class="tso-u">
        </ul>
    </div>
</div>
<a class="vip" href="http://www.ebay.co.uk/blahblah-44" title="x" itemprop="name">more text</a>

更多信息有待探索
代码

<?php
$sourcestring="your source string";
preg_match_all('/<a\b(?=\s) # capture the open tag
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\shref=(\'[^\']*\'|"[^"]*"|[^\'"][^\s>]*)) # get the href attribute
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\sclass=[\'"]?vip[\'"]?) # validate the class attribute
(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"\s]*)*"\s?> # get the entire tag
.*?<\/a>   # capture the entire anchor tag
(?=.*?More\sto\sexplore)  # validate this match is before the 'more to explore' section
/imsx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
我发现,当从页面中删除不需要的内容时,使用“运行JavaScript”功能非常有帮助。
查找“更多相关项目”部分的ID或类别,然后执行以下操作:

x=document.getElementById(“更多项目id”); x、 删除()

这将从页面中删除它。然后你可以告诉机器人开始刮

我发现使用“run JavaScript”函数在删除页面中不需要的内容时非常有用,因为您不想刮去这些内容。 查找“更多相关项目”部分的ID或类别,然后执行以下操作:

x=document.getElementById(“更多项目id”); x、 删除()


这将从页面中删除它。然后你可以告诉机器人开始刮

我知道你说它必须是正则表达式,但不要使用正则表达式来解析HTML。您无法用正则表达式可靠地解析HTML,在这条路上您将面临悲伤和挫折。一旦HTML改变了您的预期,您的代码就会被破坏。有关如何使用已编写、测试和调试的PHP模块正确解析HTML的示例,请参阅。如果可能,请使用提供DOM和XPath的工具包。这种方法不太容易出错。嗨,伙计们,非常感谢你们的评论-不幸的是,这个程序100%都是这样编写的,这需要一段时间,我真的想避免重做。当易趣的布局发生变化时,我不介意改变正则表达式(尽管我希望这不会持续一段时间)-实际上我无法使用xpath或PHP,不幸的是:(@Joe We(或I)需要一个文本/html示例,你想匹配什么,不想匹配什么。另外,必须知道正则表达式的风格。您好,谢谢您的帮助。我只想匹配URL本身,直到“更多相关项目”我很抱歉,但我找不到任何关于它是什么类型的正则表达式,虽然我相信软件是用C++编写的。谢谢!我知道你说它必须是正则表达式,但是不要用正则表达式来解析HTML。你不能用正则表达式可靠地解析HTML,你会面对这样的问题。错误和挫折。一旦HTML偏离您的预期,您的代码就会被破坏。有关如何使用已编写、测试和调试的PHP模块正确解析HTML的示例,请参阅。如果可能,请使用提供DOM和XPath的工具包。这种方法不太容易出错。大家好,非常感谢很遗憾,这个程序是100%编写的,而不是这个,这花了相当长的时间,我真的想避免重做。当易趣的布局发生变化时,我不介意更改正则表达式(尽管希望这不会持续一段时间)-我真的无法使用xpath或PHP。很遗憾:(@Joe We(或我)需要一个文本/html示例,你想匹配什么,不想匹配什么。另外,必须知道正则表达式的风格。您好,谢谢您的帮助。我只想匹配URL本身,直到“更多相关项目”出现在页面上。我很抱歉,但是我找不到任何关于它是什么类型的正则表达式,虽然我相信软件是用C++编写的。谢谢!在易趣网上我没有看到<>代码>更多的与< /COD>段相关的项目。所以我用了易趣网的HTML来显示<代码>更多的探索< /COD> >代码>(?=
积极的前瞻需要在比赛后出现更多的探索部分。你的正则表达式对我有用,但我不想得到i