用斜杠结尾的url的正则表达式

I have a regex for preg_replace for replacing urls ending with a slash (/). But it also replaces urls with .jpg at the end. For urls it works fine, but it should not replace the .jpg urls. Can someone help me please?

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);
}

This code is from an OXID module called TOXID to combine OXID with another system like wordpress. $sContent should contain any HTML from a Wordpress blog. So this basically rewrites URLs so that it looks like I am navigating inside the OXID shop. As you can see, originally it has got .html in its Regex, but this is useless if you have different URL patterns. So I changed it to a slash (/). Unfortunately it also changes URLs for .jpg.

Here is sample data for sContent: http://pastebin.com/nTXAAhWq

duanliang9288
duanliang9288 我看到你发布了什么,但是请通过举例来提取练习中的猜测和推断,即提供你希望正则表达式匹配的URL,然后是你希望它在替换后的样子,并提供一个URL你不想匹配,解释它应该违反正则表达式的条件。
大约 7 年之前 回复
dongweng6241
dongweng6241 请发布实际示例,而不是口头描述,以及您希望结果看起来像什么(再次,实际上向我们展示,不要描述它们)。您添加的内容需要熟悉Wordpress博客和OXID,因此您正在严格缩小潜在受访者的数量。给我们举个例子,任何了解正则表达式的人都可以提供帮助。
大约 7 年之前 回复
duanpi5733
duanpi5733 对不起,我现在添加了sContent的示例数据。
大约 7 年之前 回复
dream1849
dream1849 我怀疑你需要把它改成$actual='%href=“'。$source。'(?=[^”]*?。html)%'。我怀疑这个前瞻性的断言正在查看标签并进入未来的标签以获取下一个'.html'。
大约 7 年之前 回复
dou72260
dou72260 我们仍然不知道字符串是什么样的-你可以var_dump($sContent)吗?它只是href=“ds/f/sdf或asdf.d..href=”/dsf/sadf/“..df.s
大约 7 年之前 回复
doufen2769
doufen2769 我添加了有关该功能的更多信息。
大约 7 年之前 回复
dongyun3897
dongyun3897 是的,看一些你想要匹配的样本会有所帮助。也是你期望这些样品的结果。我认为你想要的东西是用非贪婪的量词来完成的,但它并不完全清楚。
大约 7 年之前 回复
dongnunai3125
dongnunai3125 你能发布$sContent的样子吗?
大约 7 年之前 回复

2个回答



  $ actual ='%href =“'。$ source。'(?=。*?/)”%'  ;  //如果$ sContent ='.. href =“my / path /”...'
$ should ='href =“'。$ target。'”';
</ code> </ pre> \ n

$ </ code>指定行的结尾,如果 $ sContent </ code>在 href </ code>属性的结束语音标记之前结束,则非常有用</ p>

  $ actual ='%href =“'。$ source。'(?=。*?/)$%'; //如果$ sContent ='href =”my /  path /'
</ code> </ pre>
</ div>

展开原文

原文

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

The $ specifies the end of the line, useful if $sContent ends before the href attribute's closing speech marks

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

duanlou7910
duanlou7910 哦,对,呃! 我最近在PowerShell上花了太多时间,其中引号是分隔符。
大约 7 年之前 回复
dongxian0320
dongxian0320 谢谢,但这不起作用。 所有网址都保持不变。
大约 7 年之前 回复
duanhui9840
duanhui9840 %是分隔符(而不是标准/所以不需要)
大约 7 年之前 回复
douli2063
douli2063 如果你想在字符串结束后匹配一个%,那怎么会起作用呢?
大约 7 年之前 回复



根据您链接的内容进行修改:</ p>

  $ actual ='%  href =“'。$ source。'(?=。*?/”)%'; 
</ code> </ pre>
</ div>

展开原文

原文

Modified based on the content you linked to:

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

duancuo1234
duancuo1234 我没有看到这些例子。 你的问题是在半小时前编辑的。
大约 7 年之前 回复
douhulao7642
douhulao7642 我现在添加了示例数据。 斜线变成了.html,因为我现在发布了绝对的原始代码。 我对它的修改是将.html改为斜线。
大约 7 年之前 回复
douweiluo0600
douweiluo0600 在查看了您链接的内容之后我编辑了答案,但由于您还没有发布您想要匹配的示例以及您希望替换的结果看起来像什么,我仍然只是猜测你是什么 想。 我只能从正则表达式本身推断出来,所以如果其中有其他错误,那么它会误导我。 您是否尝试使用$ target替换URL中的$ source实例,但仅当URL以斜杠结尾时? 如果是这样,你对$ actual进行的修改没有意义 - 为什么斜杠会变成.html?
大约 7 年之前 回复
duancuan6466
duancuan6466 好吧,$ source看起来像什么?
大约 7 年之前 回复
duanqing3026
duanqing3026 这不起作用...是的,我的正则表达式应该获得所有URL,如www.test.com/mypage/,没有像www.test.com/picture.jpg这样的文件。 但它得到了两者。
大约 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐