Preg_match和Regex无法正常工作

时间:2014-03-04 12:53:04

标签: php regex

我有一个生成列表的快速短代码..下面是短代码的外观......

 [mainlist]
   [listitem var1="" var2=""][/listitem]
   [listitem var1="" var2=""][/listitem]
   [listitem var1="" var2=""][/listitem]
   [listitem var1="" var2=""][/listitem]
 [/mainlist]

和另一个具有不同变量值的相同代码。

 [mainlist]
   [listitem var1="" var2=""][/listitem]
   [listitem var1="" var2=""][/listitem]
 [/mainlist]

我使用以下代码查找主列表中[listitem]的数量..

 preg_match_all( '/(\[listitem (.*?)\](.*?)\[\/listitem\])/' , $content, $matches);

 if(is_array($matches) && !empty($matches))
   $total_items = count($matches[0]);

如果我回显结果它会向我显示4和0.它计算第一次出现的第二次出现,它简单显示为0,为什么是这样,我该如何改进这段代码。

感谢

1 个答案:

答案 0 :(得分:0)

好的,我尝试复制你的代码,尽管我没有全部,但它似乎与你想要的东西相匹配。即使没有mainlist标签。

$content = '
    [mainlist]
      [listitem var1="" var2=""][/listitem]
      [listitem var1="" var2=""][/listitem]
      [listitem var1="" var2=""][/listitem]
      [listitem var1="" var2=""][/listitem]
    [/mainlist]
      [listitem var1="" var2=""][/listitem]
      [listitem var1="" var2=""][/listitem]';


preg_match_all('/\[listitem(.*?)\](.*?)\[\/listitem\]/', $content, $matches);

print "<PRE><FONT COLOR=ORANGE>"; print_r($matches); print "</FONT></PRE>";

if(is_array($matches) && !empty($matches)) {
    $total_items = count($matches[0]);
}

// THIS PRINTS 6
print "<BR>TOTAL ITEMS: ".$total_items;

因此,这让我认为问题是,正如米歇尔所建议的那样,你的mainlist功能会引入内容。基本上,我认为你的问题的答案并不像你想的那样在REGEX部分,而是在构建列表项的部分开始。

检查以确保add_shortcode函数正确构建mainlist项。然后你的其余代码应该可以工作。