替换php中不匹配模式的字符串中的所有URL

替换php中不匹配模式的字符串中的所有URL,php,regex,preg-replace,Php,Regex,Preg Replace,我正在使用此代码替换字符串中的URL preg_replace('#<a.*?>(.*?)</a>#i', '\1', $text) preg#u replace('#(.*)#i','\1',$text) 我如何做同样的事情,但保持URL符合特定模式(即从我想要保留的域开始) 更新 事实证明,我想要保留的url包括相对url,因此我现在想要消除所有与给定url模式不匹配且不是相对链接的url 您需要一个否定的前瞻性断言: preg_replace('#<a(?

我正在使用此代码替换字符串中的URL

preg_replace('#<a.*?>(.*?)</a>#i', '\1', $text)
preg#u replace('#(.*)#i','\1',$text)
我如何做同样的事情,但保持URL符合特定模式(即从我想要保留的域开始)

更新


事实证明,我想要保留的url包括相对url,因此我现在想要消除所有与给定url模式不匹配且不是相对链接的url

您需要一个否定的前瞻性断言:

preg_replace('#<a(?![^>]+?href="?http://keepthisdomain.com/foo/bar"?).*?>(.*?)</a>#i', '\1', $text);
preg#u replace(“##i”、“\1”、$text);
编辑:如果只想匹配相对域,则逻辑相同。只需拿出协议和域名:

preg_replace('#<a(?![^>]+?href="?/?path/to/foo/bar"?).*?>(.*?)</a>#i', '\1', $text);
preg#u replace(“##i”、“\1”、$text);

之后的
/
表示这些字符是可选的。因此,第二个示例将适用于
path/to/foo/bar
/path/to/foo/bar

如何使其在与保留域匹配的URL之外保留相对URL?只需调整它;请参阅我的编辑。如果您觉得答案有用,请接受!他还想知道如何替换文本中出现的URL,即使它们不是超链接。因此,一个自由格式的url也将被删除。当然,保留与keepthisdomain匹配的URL。我将在自由格式条之前应用超链接条正则表达式regex@lordmj这里的逻辑是一样的。只需使用第一个版本,没有与锚定标记相关的部分,如:
preg_replace('#(?)?!http://keepthisdomain.com/foo/bar)http://[^\s]*#i'、'\1'、$text)注意:这可能需要一些调整,因为它将应用于所有内容,而不仅仅是纯文本。例如,它可能会核弹一些
img
标签。您需要修改“良好”的URL模式,以保留任何您想要保留的内容。请再次访问。现在我想删除与以前相同的超链接。但是如果它具有属性rel=“shadowbox[a]”,我希望保留超链接。