正则表达式捕获标签和内容

时间:2015-09-19 00:56:55

标签: php regex

我需要一个php正则表达式解决方案来捕获某些标签及其内容。

我找到了这个:

~<tag>(.*?)</tag>~isg

哪个内容可以包含<tag>内的所有内容,但我还需要它来捕获<tag></tag>

我真的很擅长正则表达式,只是无法理解它,被卡在regex101.com上试图找到过去一小时的解决方案,但没有运气Lol

我需要的解决方案是,如果搜索文本是:

<tag>Hey1</tag> Blah Blah <tag>Hey2</tag>

我需要捕获:

<tag>Hey1</tag>

<tag>Hey2</tag>

2 个答案:

答案 0 :(得分:1)

<div style="height:100vh">
  <section style="height:100vh">
        Welcome...red div below should fill entire container        

            <section style="display:flex; flex-direction: column; background:red; height: auto">
              <header>
                Red Header Here...
              </header>
              <div>
                Red Body here...
              </div>
              <footer>
                Red Footer here...
              </footer>
            </section>

        Random stuff below should still be displayed

    </section>
</div>

答案 1 :(得分:1)

这是正则表达式和解析器的答案......

分析器:

$html = '<tag>Hey1</tag> Blah Blah <tag>Hey2</tag>';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);
libxml_use_internal_errors(false);
$tag = 'tag';
$tags = $doc->getElementsByTagName($tag);
foreach ($tags as $foundtag) {
        echo "<$tag>" . $foundtag->nodeValue . "</$tag>";
}

解析器输出:

<tag>Hey1</tag><tag>Hey2</tag>

正则表达式:

preg_match_all('~(<tag>.*?</tag>)~is', $html, $matches);
print_r($matches[1]);

正则表达式输出:

Array
(
    [0] => <tag>Hey1</tag>
    [1] => <tag>Hey2</tag>
)

移动()告诉正则表达式要捕获的内容。那是capture group