【发布时间】:2013-08-01 15:55:28
【问题描述】:
我有一个用于 preg_replace 的正则表达式,用于替换以斜杠 (/) 结尾的 url。但它最后也会用 .jpg 替换 url。对于 url,它可以正常工作,但不应替换 .jpg url。有人可以帮帮我吗?
protected function _rewriteUrls($sContent)
{
$target = $this->getConfig()->getConfigParam('sShopURL').$this->_getToxidLangSeoSnippet().'/';
$source = str_replace('.','\.',$this->_getToxidLangSource());
$actual = '%href="'.$source.'(?=.*?.html)%';
$should = 'href="'.$target;
return preg_replace($actual, $should, $sContent);
}
此代码来自一个名为 TOXID 的 OXID 模块,用于将 OXID 与另一个系统(如 wordpress)结合起来。 $sContent 应该包含来自 Wordpress 博客的任何 HTML。所以这基本上重写了 URL,所以看起来我在 OXID 商店内导航。如您所见,最初它的正则表达式中有 .html,但如果您有不同的 URL 模式,这将毫无用处。所以我把它改成了斜杠(/)。不幸的是,它还会更改 .jpg 的 URL。
以下是 sContent 的示例数据: http://pastebin.com/nTXAAhWq
【问题讨论】:
-
你能发布
$sContent的样子吗? -
是的,查看一些您尝试匹配的样本会有所帮助。还有你对这些样本的期望结果。我认为你想要的可以用一个非贪婪的量词来完成,但这并不完全清楚。
-
我添加了有关该功能的更多信息。
-
@tutorial-portal.com 我们仍然不知道字符串是什么样的 - 你能
var_dump($sContent)吗?只是href="ds/f/sdf还是asdf .d..href="/dsf/sadf/" ..df.s -
我怀疑您需要将其更改为
$actual = '%href="'.$source.'(?=[^"]*?.html)%'。我怀疑前瞻性断言正在查看标签并进入未来标签以获取下一个“.html”。