Preg匹配多行的html代码

时间:2017-11-22 17:52:21

标签: php preg-match

我需要在<内部获取部分代码ins> 标记来源:

<some tags there and code there><ins class="adsbygoogle"
     style="display:inline-block;width:670px;height:100px"
     data-ad-client="ca-pub-9438155779940585"
     data-ad-slot="1115596158"></ins>bla bla there <tags></tags>

我用谷歌搜索并搜索了所有的stackoverflow几个小时,使用网站https://regexr.com/并且无法做到!

我试过了:

/<ins[.\s]*<\/ins>/ism

/<ins[.|\s]*<\/ins>/ism

/<ins(\w\d\s.)*<\/ins>/ism (i know thats is totally wrong, but i also tried many combos like this)

所有其他百万种组合。什么都没有帮助,请帮助!

2 个答案:

答案 0 :(得分:0)

要匹配您想要使用的ins标记 中的所有内容:

<\s*ins[^>]*>([^<]*)<\s*\/\s*ins\s*>

或者,如果标记为<ins>,则始终没有id=''等等。您可以简单地说:

<ins>([^<]*)<\/ins>

这是例如

<ins>
   This is
   A Match
</ins>

会返回

This is
A Match

REGEX 101上的示例,其中包含匹配<ins id="whatever"></ins>

的详细说明

REGEX 101上的示例,其中包含仅匹配<ins></ins>

的详细说明

答案 1 :(得分:0)

我不确定你真正想要检索哪个部分,所以这里有一个自给自足的测试脚本,其中包括我能想象的所有内容:)。

<?php

$src = <<<SRC
<some tags there and code there><ins class="adsbygoogle"
     style="display:inline-block;width:670px;height:100px"
     data-ad-client="ca-pub-9438155779940585"
     data-ad-slot="1115596158">ins_content</ins>in_between<tags></tags></some>
SRC;

// What's inside <ins> and </ins>
$pattern = '@<ins[^>]*>(.*)</ins>@ium';
preg_match($pattern, $src, $matches);
echo $matches[1].PHP_EOL; // ins_content

// All attribues of the <ins> element
$pattern = '@(<ins([^>]+))@ium';
preg_match($pattern, $src, $matches);
echo $matches[2].PHP_EOL; // class="adsbygoogle" style...

// Everything between </ins> and <tags>
$pattern = '@ins>(.*)<tags@ium';
preg_match($pattern, $src, $matches);
echo $matches[1].PHP_EOL; // in_between