【问题标题】:Regex and numeric value to capture between two differents tags在两个不同标签之间捕获的正则表达式和数值
【发布时间】:2013-07-03 10:19:21
【问题描述】:

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

我正在使用 preg_match_all。我有 7 个信息要获取:标题、作者、编辑...

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

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

起初我正在尝试这个:

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

这是可行的,但我只想要数字。我正在网上搜索正则表达式指南,但我不明白如何将语法用于我的目标,因为此代码产品没有介于两个这样的标签之间:&lt;open&gt;...&lt;/open&gt;。此代码产品有 4 或 5 个数字。

感谢您的帮助!

【问题讨论】:

标签: regex


【解决方案1】:

试试下面的正则表达式:

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

【讨论】:

    【解决方案2】:

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

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

    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
    )
    

    【讨论】:

    • @FlorentDelage 大声笑我虽然你完全忘记了它。好吧,无论如何很乐意提供帮助。不要忘记accept 一个答案!
    【解决方案3】:

    试试这个...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多