首页 > 解决方案 > 用于匹配 HTML 字符串的正则表达式

问题描述

我正在尝试做一个preg_match_all,它不起作用。

preg_match_all(
    '!<div class="Description_Productinfo" itemprop="description"><p><span style="color:#7f8c8d;"><span style="font-family:Arial,Helvetica,sans-serif;"><span style="font-size:14px;">(.*?)</span></span></span></p></div>!',
    $html,
    $matches1,
    PREG_SET_ORDER
);
foreach ($matches1 as $soge2){print_r($soge2);}

我如何使它工作?

标签: phphtmlpreg-match-all

解决方案


使用 RegEx 解析 HTML 可能不是最好的主意,这似乎是您可能想要做的。但是,根据您的问题,我猜您可能希望使用以下方法从此标签中获取所有数据(.*)

<span style="font-size:14px;"></span>

可以这样做。首先,您可以preg_match_all();根据以下内容进行设计:

preg_match_all($pattern, $subject, $matches);

在这种情况下,您的主题是您的 HTML 输入,我不确定,但您的模式可能是:

/<span style=\"font-size:14px;\">([\w\s]+)(<\/span>)/s 

代码

$html = '<div class="Description_Productinfo" itemprop="description"><p><span style="color:#7f8c8d;"><span style="font-family:Arial,Helvetica,sans-serif;"><span style="font-size:14px;">Alphanumeric Words If You Wish To Match</span></span></span></p></div>';

preg_match_all('/<span style=\"font-size:14px;\">([\w\s]+)(<\/span>)/s', $html, $matches1, PREG_SET_ORDER);
var_dump($matches1);

foreach ($matches1 as $soge2) {
    print_r($soge2);
}

输出

Array
(
    [0] => <span style="font-size:14px;">Alphanumeric Words If You Wish To Match</span>
    [1] => Alphanumeric Words If You Wish To Match
    [2] => </span>
)

图案

您可以使用工具来设计您想要的模式,例如:

在此处输入图像描述


推荐阅读