preg_match只返回一次相同的元素

时间:2011-08-03 15:53:33

标签: php regex preg-match

我正在浏览一个字符串并处理! - 和 - !之间的所有元素。但只有独特的元素才是流程。当我有! - 示例 - !在文本中还有一点! - example-- !,第二个被忽略。

这是代码:

while ($do = preg_match("/!--(.*?)--!/", $formtext, $matches)){

我知道preg_match_all,但需要使用preg_match。

有任何帮助吗?提前谢谢!

3 个答案:

答案 0 :(得分:4)

您希望PHP在上一场比赛后仅查找匹配项。为此,您需要使用PREG_OFFSET_CAPTURE标志捕获字符串偏移量。

示例:

$offset = 0;
while (preg_match("/!--(.*?)--!/", $formtext, $match, PREG_OFFSET_CAPTURE, $offset))
{
    // calculate next offset
    $offset = $match[0][1] + strlen($match[0][0]);

    // the parenthesis text is accessed like this:
    $paren = $match[1][0];
}

有关详细信息,请参阅preg_match文档。

答案 1 :(得分:3)

使用preg_match_all

修改:一些澄清产量:

$string = '!--example--!   asdasd !--example--!';
//either this:
$array = preg_split("/!--(.*?)--!/",$string,-1,PREG_SPLIT_DELIM_CAPTURE);
var_dump($array);
array(5) {
  [0]=>
  string(0) ""
  [1]=>
  string(7) "example"
  [2]=>
  string(10) "   asdasd "
  [3]=>
  string(7) "example"
  [4]=>
  string(0) ""
}

//or this:
$array = preg_split("/(!--(.*?)--!)/",$string,-1,PREG_SPLIT_DELIM_CAPTURE);
var_dump($array);

array(7) {
  [0]=>
  string(0) ""
  [1]=>
  string(13) "!--example--!"
  [2]=>
  string(7) "example"
  [3]=>
  string(10) "   asdasd "
  [4]=>
  string(13) "!--example--!"
  [5]=>
  string(7) "example"
  [6]=>
  string(0) ""
}

答案 2 :(得分:0)

while ($do = preg_match("/[!--(.*?)--!]*/", $formtext, $matches)){

指定模式末尾的*以指定多个。它们都应该添加到$ matches数组中。