【发布时间】:2015-04-27 01:45:54
【问题描述】:
我有一个字符串,其中包含一些文本和一些 URL。我的目标是从字符串中删除以下内容:
$removeThis = array('http://', 'https://', 'www.', '.com', '.net');
但仅当要删除的单词不以开头:http://good.com、http://www.good.com、https://good.com、或https://www.good.com。
换句话说,我想从字符串中删除 http|s|www.|.com|.net 部分(但前提是它们不属于 good.com 域)。
输入:
$string='Hello world, this is spamming: www.spam.com, spam.net, https://spam.com, https://spam.com/tester. And this is not spam so do not touch it: http://www.good.com/okay, http://good.com, and also https://good.com/well';
结果应该是:
Hello world, this is spamming: spam, spam, spam, spam/tester. And this is not spam so do not touch it: http://www.good.com/okay, http://good.com, and also https://good.com/well
我认为这里需要 preg_replace..
【问题讨论】:
-
是的,你可以在这里使用 preg_replace。你在哪里被它挂断了?
-
我不明白 preg_replace 是如何工作的。我试过:str_replace (array('http','https','www.','',$string),但它会删除所有内容。但我想留下包含 good.com 域的网址..
-
是的,您的 str_replace 会删除所有内容。你已经知道你需要使用 preg_replace,那么为什么不直接研究它,而不是浪费别人的时间来给你答案呢?如果您在 preg_replace 中遇到某些问题,那么请使用您迄今为止尝试过的代码提出与它相关的问题。 php 的美妙之处在于,大部分您的问题都可以通过阅读和谷歌搜索来回答。
-
我只是无法理解正则表达式,我认为 preg_replace 使用正则表达式。是的,我研究过它,但对我来说很难掌握..
-
附带说明,您可以调用
explode()将字符串拆分为一个tmp 数组,而不是preg_replace。从那里,我将创建两个新数组good和bad,..while 在 foreach 循环中,将好域和坏域分隔到它们自己的数组中(查看strpos())。在坏域数组上执行str_replace,然后将两个数组重新合并在一起,如果你愿意,implode()将它们重新组合成一个字符串
标签: php