2010-June-11
<remove>2010-June-2</remove>
<remove>2010-June-3</remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-3
2010-June-2
2010-June-1
我正在尝试查找<remove>
代码
这就是我所拥有的:
$pattern = "/<remove>(.*?)<\/remove>/";
preg_match_all($pattern, $_POST['exclude'], $matches);
foreach($matches as $deselect){
foreach ($deselect as $display){
echo $display."<br />";
}
}
这就是它的回报:
2010-June-2
2010-June-3
2010-June-2
2010-June-3
为什么会加倍,我该如何防止这种情况?
答案 0 :(得分:2)
不要使用正则表达式来解析xml / html ...
话虽如此,问题是因为匹配结构如下:
array(
0 => array('whole match1', 'whole match 2', 'whole match 3'),
1 => array('subpattern match 1', 'subpattern match 2', 'subpattern match 3'),
);
所以不要做你的foreach,而是做一个:
if (!empty($matches)) {
foreach ($matches[1] as $value) {
echo $value;
}
}
或使用PREG_SET_ORDER
标志来preg_match_all,这将产生如下数组结构:
array(
0 => array('whole match1', 'subpattern match 1'),
0 => array('whole match2', 'subpattern match 2'),
0 => array('whole match3', 'subpattern match 3'),
);
那么你的foreach会变成:
if (!empty($matches)) {
foreach ($matches as $match) {
echo $match[1];
}
}
答案 1 :(得分:1)
尝试使用$matches[0]
而非$matches
。
我遇到了同样的问题
答案 2 :(得分:0)
不是正则表达式解决方案,但您可以删除重复的内容:
array_unique($matches);