php正则表达式替换HREF属性

发布于 2024-11-17 21:13:21 字数 392 浏览 1 评论 0 原文

如何使用php preg_replace正则表达式删除所有包含

$newlink = preg_replace('/^<a href="#(.*)" (?:.*?)>(.*)<\/a>/is', '', $link);

我想将这些作为锚标记的链接替换

<a href="#part1">go to part1</a>
<a href="#part2">go to part2</a>
<a href="#part3">go to part3</a>

为空值。

How to use php preg_replace and regular expression to remove all the hyperlink which contain <a href="#. Here is what I write, but it doesn't work

$newlink = preg_replace('/^<a href="#(.*)" (?:.*?)>(.*)<\/a>/is', '', $link);

I want replace these links which as aa anchor mark

<a href="#part1">go to part1</a>
<a href="#part2">go to part2</a>
<a href="#part3">go to part3</a>

to empty value.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

怪异←思 2024-11-24 21:13:21

首先我要说的是,使用正则表达式来解析/修改 HTML 文档可能是错误的方法。如果您正在这样做,我建议您查看 DOM 文档这适用于任何其他修改。

话虽如此,使您的表达式非贪婪(.*?)可能会起作用。

$newlink = preg_replace('/^<a href="#(.*?)"[^>]+>(.*?)<\/a>/', '', $link);

注意: 这还假设 href 是所有锚标记中的第一个属性。这可能是一个糟糕的假设。

Let me start by saying that using regular expressions for parsing/modifying HTML documents can be the wrong approach. I'd encourage you to check out DOM Document if you're doing this for any other modifications.

With that said, making your expression non-greedy (.*?) will probably work.

$newlink = preg_replace('/^<a href="#(.*?)"[^>]+>(.*?)<\/a>/', '', $link);

Note: This also assumes href is the first attribute in all you anchor tags. Which may be a poor assumption.

请持续率性 2024-11-24 21:13:21

它只从 html 中删除 href 属性

echo preg_replace('/(<[^>]+) href=".*?"/i', '$1', $content);

It's remove only href attribute from html

echo preg_replace('/(<[^>]+) href=".*?"/i', '$1', $content);
国际总奸 2024-11-24 21:13:21

如果您只想替换 href 的值,则需要使用断言来匹配它而不匹配其他任何内容。此正则表达式将仅匹配 URL:

/(?<=<a href=")#.*?(?=")/

If you want to replace only the href's value, you'll need to use assertions to match it without matching anything else. This regex will only match the URL:

/(?<=<a href=")#.*?(?=")/
千里故人稀 2024-11-24 21:13:21

谢谢两位,但你们的回答对我来说仍然不起作用。

我不擅长正则表达式,看了很多文档,又写了一遍。也许这看起来很丑,但它有效:)

$newlink = preg_replace('/(<a href=")#.*?(<\/a>)/is', '', $link);

Thanks two of all, But both of your answer still not work for me.

I am not good at regular expression, I read many documents and write again. maybe this looks ugly, but it work :)

$newlink = preg_replace('/(<a href=")#.*?(<\/a>)/is', '', $link);
无妨# 2024-11-24 21:13:21

请使用 /()/i 正则表达式

<?php 
     $oldLink = '<a href="http://test.com">click this link</a>';
     $res = "http://stackoverflow.com";
     echo $newLink = preg_replace('/(<a.*?href=([\'"]))(.*?)(\2.*?>)/i', '$1'.$res.'$2', $oldLink);    
?>

如果您想测试此正则表达式, ,那么您可以这里https://regex101.com/r/mT1sVK/1

use /(<a.*?href=([\'"]))(.*?)(\2.*?>)/i regex

<?php 
     $oldLink = '<a href="http://test.com">click this link</a>';
     $res = "http://stackoverflow.com";
     echo $newLink = preg_replace('/(<a.*?href=([\'"]))(.*?)(\2.*?>)/i', '$1'.$res.'$2', $oldLink);    
?>

if you wants to test this regex, then you can here https://regex101.com/r/mT1sVK/1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文