【发布时间】:2020-10-28 02:59:30
【问题描述】:
我有一个变量$cart_item,其中包含我想包含在我的页面上的模板代码。
由于这个模板有一些我不需要的信息,我使用函数preg_match 查找并使用str_replace 从$cart_item 中删除这些信息。
我第一次使用preg_match 这工作正常。但是我第二次想用它,它没有找到任何匹配项。
代码:
preg_match("/(<if type>)(.+?)(<\/if>)/s", $cart_item, $matches);
if($item['type'] != "") {
$cart_item = str_replace($matches[1], "", $cart_item);
$cart_item = str_replace($matches[3], "", $cart_item);
$cart_item = str_replace("{{item_type}}", $item['type'], $cart_item);
} else {
$cart_item = str_replace($matches[0], "", $cart_item);
}
preg_match("/(<if campaign_codes>)(.+?)(<\/if>)/s", $cart_item, $matches);
var_dump($matches);
if($item['campaign_codes'] != "") {
} else {
echo "Keine Kampagnen vorhanden";
$cart_item = str_replace($matches[0], "", $cart_item);
}
直到第一个 if 子句结束,一切正常。但是在我调用下一个preg_match 和var_dump($matches) 之后,数组是空的。
现在的窍门:如果我省略了第一个 if 子句,那么在第一次执行 preg_match 之后数组就不是空的。
我已经尝试重命名第二个 preg_match 的数组,但这没有帮助。
我不知道怎么做,但第一个 if 子句似乎做了它不应该做的事情。
谁能给我解释一下,给我一个解决问题的建议?
【问题讨论】:
-
你怎么知道
preg_match("/(<if type>)(.+?)(<\/if>)/s", $cart_item, $matches);是否真的匹配了一些东西?此外,您正在删除第一个匹配项,因此在第二个 preg_match() 上可能没有任何匹配项。 -
查看这个答案以获得更好的方法来处理这个stackoverflow.com/questions/26702506/…
-
@Maxt8r 我知道,因为 if 子句正在工作。在这种情况下,
$item['type']是 "",因此执行 else 子句。对于您的第二个注意事项:我在这里看不到问题。第二个preg_match使用了不同的模式,那么这有什么关系呢? -
@Maxt8r 我看不到与链接解决方案的相似之处。我正在尝试一些不同的东西,因为我根据
$item-array 中提供的一些进一步信息进行替换。所以对我来说问题仍然是,第一个 if 子句对第二个preg_matchfunction 有什么影响。如果没有第一个 if 子句,它就可以工作。 -
但是为什么第二个
preg_match应该尝试匹配已删除的相同内容?模式不同 - 第一个preg_match尝试查找“”,第二个尝试查找 。由于第一个 if 子句正常工作,“ ”部分不会被删除,并且对于第二个 preg_match仍然存在。
标签: php regex preg-match str-replace