【问题标题】:Regex for url ending with a slash以斜杠结尾的 url 的正则表达式
【发布时间】: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”。

标签: php regex


【解决方案1】:
$actual    = '%href="'.$source.'(?=.*?/)"%'; //if $sContent = '.. href="my/path/" ...'
$should    = 'href="'.$target.'"';

$ 指定行尾,如果$sContenthref 属性的结束语音标记之前结束,则很有用

$actual    = '%href="'.$source.'(?=.*?/)$%'; //if $sContent = 'href="my/path/'

【讨论】:

  • 如果你想在字符串末尾匹配一个 %,这将如何工作?
  • @AdiInbar % 是分隔符(而不是标准的/,所以不需要\/
  • @SmokeyPHP 哦,对了,duh!我最近在 PowerShell 上花费了太多时间,其中引号是分隔符。
【解决方案2】:

根据您链接到的内容修改:

$actual = '%href="'.$source.'(?=.*?/")%';

【讨论】:

  • 这不起作用...是的,我的正则表达式应该获取所有 URL,例如 www.test.com/mypage/,而不是像 www.test.com/picture.jpg 这样的文件。但两者兼而有之。
  • @tutorial-portal.com 那么,$source 是什么样的?
  • 我在查看了您链接到的内容后编辑了答案,但是由于您还没有发布您想要匹配的内容以及您希望替换结果的样子的示例,我'我仍然只是猜测你想要什么。我只能从正则表达式本身推断出来,所以如果它有其他错误,那么它会误导我。您是否尝试用 $target 替换 URL 中的 $source 实例,但仅当 URL 以斜杠结尾?如果是这样,您对 $actual 所做的修改就没有意义了 - 为什么斜杠会变成 .html
  • 我现在添加了示例数据。斜线变成了 .html,因为我现在发布了绝对原始代码。我对它的修改是将 .html 更改为斜杠。
  • 我没有看到示例。您的问题上次编辑是半小时前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
相关资源
最近更新 更多