0

<!--dle_image_begin:http://some_url.com/uploads/posts/2012-12/1.png|--><img src="some_url.com/uploads/posts/2012-12/1.png" alt=" " title=" " /><!--dle_image_end--> bla bla bla bla <!--dle_image_begin:http://some_url.com/image/2.png|--><img src=" some_url.com/uploads/image/2.png" alt=" " title=" " /><!--dle_image_end--> bla bla bla <!--dle_image_begin:http://some_url.com/asfafsdsaf|- -><img src="some_url.com/asfafsdsaf" alt=" " title=" " /><!--dle_image_end-->

如何抓住每<!--dle_image_begin: ... <!--dle_image_end-->一个prey_match_alldle_image_begin和之间的内容真的无关紧要dle_image_end- 我只需要将它们中的每一个放在数组中(包括dle_image_begindle_image_end标签)。

<!--dle_image_begin:.*([^|]dle_image_end-->)我试过:和之类的东西<!--dle_image_begin:.*?(<--dle_image_end-->),但仍然无法理解它是如何工作的......有人可以给点提示吗?

4

2 回答 2

0

有两个问题。 <--dle_image_end应该是<!--dle_image_end,你可以省略括号:

<?php

  $source = <<<SOURCE_HEREDOC
<!--dle_image_begin:http://some_url.com/uploads/posts/2012-12/1.png|--><img src="some_url.com/uploads/posts/2012-12/1.png" alt="" title=""  /><!--dle_image_end--> bla bla bla bla <!--dle_image_begin:http://some_url.com/image/2.png|--><img src="some_url.com/uploads/image/2.png" alt="" title=""  /><!--dle_image_end--> bla bla bla <!--dle_image_begin:http://some_url.com/asfafsdsaf|--><img src="some_url.com/asfafsdsaf" alt="" title=""  /><!--dle_image_end-->
SOURCE_HEREDOC;

  $regex = "/<!--dle_image_begin:.*?--dle_image_end-->/";

  preg_match_all($regex,trim($source),$matches);

  echo "\n";
  foreach($matches as $match) {
    foreach($match as $part) {
      echo "\n";
      echo "  -> ".$part;
      echo "\n";
    }
  }
  echo "\n";
?>

输出:

  -> <!--dle_image_begin:http://some_url.com/uploads/posts/2012-12/1.png|--><img src="some_url.com/uploads/posts/2012-12/1.png" alt="" title=""  /><!--dle_image_end-->

  -> <!--dle_image_begin:http://some_url.com/image/2.png|--><img src="some_url.com/uploads/image/2.png" alt="" title=""  /><!--dle_image_end-->

  -> <!--dle_image_begin:http://some_url.com/asfafsdsaf|--><img src="some_url.com/asfafsdsaf" alt="" title=""  /><!--dle_image_end-->
于 2013-01-07T22:16:32.997 回答
0

只需使用这个正则表达式

/(<!--dle_image_begin.*?dle_image_end-->)/

preg_match_all( '/(<!--dle_image_begin.*?dle_image_end-->)/', $code, $matches ). $matches将包含所有匹配项。

它将匹配以它之间的任何内容开头<!--dle_image_begin和结尾的模式dle_image_end-->。周围的括号必须匹配整个表达式,而不仅仅是一部分。

于 2013-01-07T22:22:17.503 回答