用于捕获两个不同标记之间的正则表达式和数值

时间:2013-07-03 10:19:22

标签: regex

我正在尝试制作一个帮助我从网站上获取新书的脚本。

我正在使用preg_match_all。我有7个信息可以获得:标题,作者,编辑......

创建我的preg匹配掩码时遇到了一些问题。例如,我需要这里的产品代码。每页都有3到10个代码产品。 :

<li><label>Réf : </label>21608</li>

起初我正在尝试这个:

$mask ="/Réf :(.*)<\/li>/Us";

这是工作,但我只想要数字。我正在网上搜索正则表达式指南,但我不明白如何使用语法来实现我的目标,因为这个代码产品不是像这样的两个标签:<open>...</open>。此代码产品有4或5个数字。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

尝试使用正则表达式:

/Réf :\D*(\d+)<\/li>/
  • \D:非数字
  • \d:数字

答案 1 :(得分:0)

试试这个......

/>\s*(\d{3,10})\s*</

答案 2 :(得分:0)

让我们一步一步地尝试匹配这些数字:

  1. 我们Réf,让我们/réf/i并使用i修饰符来匹配不区分大小写。
  2. space : space,让我们将其设为动态,并将其与\s*匹配,后者将匹配空白/réf\s*:\s*/i
  3. 的零次或多次
  4. 我们根本没有数字,我们可以使用\D*来匹配除数字以外的所有内容:/réf\s*:\s*\D*/i
  5. 我们知道有4到5位数字,我们会使用\d{4,5}来匹配数字4或5次:/réf\s*:\s*\D*\d{4,5}/i
  6. 我们只需要数字,所以我们将它们放入一个组:/réf\s*:\s*\D*(\d{4,5})/i

  7. PHP代码

    $string = '<li><label>Réf : </label>21608</li>';
    preg_match_all('/réf\s*:\s*\D*(\d{4,5})/i', $string, $m);
    print_r($m[1]);
    

    <强>输出

    Array
    (
        [0] => 21608
    )