我有关于正则表达式的问题。

我想要做的是只使用一个正则表达式来匹配字符串的一部分,并获得内部划分的内容。 不知道如何解释,所以会写一个例子

要解析的示例html

<div class="test">
    <span>a</span>
    <span>b</span>
    <span>c</span>
    <span>d</span>
</div>
<div class="test2">
    <span>aa</span>
    <span>bb</span>
    <span>cc</span>
    <span>dd</span>
</div>

我想preg_match(_all)只跨越.test的值

通常,我会用

preg_match('/<div class="test">(.*?)<\/div>/', $html, $matches)
preg_match_all('/<span>(.*?)<\/span>/',  $matches[1],  $matches2)

然后使用另一个preg_match_all来获取值。

但是,我想知道是否有一种方法可以在一个模式中创建一个子模式,该模式会自动首先匹配div,然后是所有跨度,并将resulat作为数组返回。

这样的事情可能吗? 我无处可寻。 也许我不知道它在技术上是怎么称呼的。

编辑:输出我想得到(更改数据样本),但只有一个preg_match或preg_match_all调用

array(
    'a',
    'b',
    'c',
    'd',
);

===============>>#1 票数:3 已采纳

使用DOMParser而不是正则表达式..

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('div') as $tag) {
    if ($tag->getAttribute('class') === 'test')
    {
        foreach($tag->getElementsByTagName('span') as $stag)
        {
        $val[]=$stag->nodeValue;
        }
    }
}
print_r($val);

使用XPath查询..(相同)

$xpath = new DOMXpath($dom);
$elements = $xpath->query("*/div[@class='test']/span");
foreach($elements as $v)
{
    $arr[]=$v->nodeValue;
}
print_r($arr);

OUTPUT :

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)

工作演示 - 正常的DOM方式

工作演示 - XPath方式

===============>>#2 票数:0

这是你想要的吗:

/<span>([^<]*)<\\/span>/preg_match_all

演示: http//regex101.com/r/yD6gM0

  ask by Grzegorz translate from so

未解决问题?本站智能推荐:

2回复

用于正确嵌套动态菜单的正则表达式

我有一个动态菜单,看起来像 我想将其更改为正确嵌套的导航菜单 我尝试了几个str_replace但由于列表是动态的它不会工作。 我是Regex的新手,我不知道如何将这个动态菜单格式化为正确嵌套/格式化的菜单。 提前致谢!
3回复

使用正则表达式获取html标记内的所有文本?

例如,我有HTML: 如何在正则表达式中使所有文本变强并跨度?
3回复

PHP正则表达式-获取^之间的值

无法解决这个问题。 我有绳子 ^c1_e^,^d_e^,^c^ 得到^和^之间的值的正则表达式是什么? 我试过了 这不起作用
3回复

PHP正则表达式用键和值拆分

我有一个信息,存储在一个像这样的字符串中: 我想用一个正则表达式拆分字符串,但这样我就可以将对拆分成数组 有没有办法做到这一点?
4回复

使用正则表达式匹配作为数组指针

我想用一个字符串中的一些数字替换该数字指向的位置中的数组内容。 例如,将“你好1你很棒”替换为“Hello myarray [1]你很棒” 我正在做下一个: preg_replace('/(\\d+)/','VALUE: ' . $array[$1],$string); 但它不
3回复

将所有标签替换为php中的某些字符

我想将<a></a>替换为php中的[] ,例如,如果我有: This is sample test to say you <a href="nowhere/333" id="blabah" > help</a> and you can red
4回复

PHP正则表达式删除下划线后的所有内容

我有一个包含两种格式的字符串的数组,这些是... 我需要生成一个正则表达式来删除下划线和此后的任何字符,所以65_12345将变为65 ,任何人都可以建议一个简单的表达式来执行此操作吗?
3回复

从PHP中的字符串中提取html属性[重复]

这个问题已经在这里有了答案: 您如何在PHP中解析和处理HTML / XML? 30个答案 我有一个看起来像这样的变量: 并且我想以某种方式提取data-tpl-attributes,因此最终得到的结果数组如下所示: “ data-tpl-”属性的
4回复

使用正则表达式关闭标签后得到单词? [重复]

这个问题已经在这里有了答案: XPath-在某些节点 1回答 后选择文本 我有以下字符串 我对获取编号BD-F5300 。 数字可以是任何文字,数字。 任何帮助,我该如何获得? 谢谢。
4回复

比较字符串部分和数组值

我在PHP中有一个字符串形成HTML选择框。 我也有一个阵列。 我想要的是:我想比较选择框与数组元素的选项,只保留选择框中与数组元素匹配的选项。 以下是使概念更清晰的代码。 字符串形成选择框是: 数组是: 比较之后,我想要字符串: 我试过使用DOM这给了我来自