【问题标题】:Rewriting HTML anchor using str_replace and regex [duplicate]使用 str_replace 和正则表达式重写 HTML 锚 [重复]
【发布时间】:2020-04-25 13:12:45
【问题描述】:

以下是通过编辑器自动输出的:

<a href="https://someurl.com/1001-web-file.pdf">1001-web-file</a>

我想添加一个 ID:

<a id="replace" href="https://someurl.com/1001-web-file.pdf">1001-web-file</a>

然后使用str_replace 和正则表达式查找有问题的锚点并替换为:

<a href="https://someurl.com/1001-web-file.pdf"><img src="https://someurl.com/1001-web-file-pdf-290x300.jpg"/></a>

我设法做的是:

$replace = array(
'<a id="pdfthumb" href="' => '<img src="',
'.pdf">pdfthumb</a>' => '-pdf-290x300.jpg"/></br>'
);

$text = str_replace(array_keys($replace), $replace, $text);
return $text;

这可以拆除锚标记并重建为img。但我不能做更多。我玩弄了一些正则表达式来创建通配符,并意识到我需要为 href 创建一个变量,以便在我重建 HTML 时使用,但我被卡住了。

非常感谢任何见解:)

【问题讨论】:

    标签: php regex str-replace


    【解决方案1】:

    在您的情况下,我认为如果您在客户端使用 javascript 执行此操作应该会更容易。

    我的背景不是 PHP,但您可以使用相同的模式来测试您的 PHP 代码:

    输入:

    <a href="https://someurl.com/1001-web-file.pdf">1001-web-file</a>
    

    输出:

    <a href="https://someurl.com/1001-web-file.pdf"><img src="https://someurl.com/1001-web-file-pdf-290x300.jpg"/></a>
    

    var input = '<a href="https://someurl.com/1001-web-file.pdf">1001-web-file</a>';
    
    var pattern = /href=\"(.+)\.pdf\"/;
    
    var match = input.match(pattern)[1];
    
    input = input.replace(/(<a.*>).*(<\/a>)/, '$1<img src="' + match + '-pdf-290x300.jpg">$2');
    
    console.log(input)

    【讨论】:

    • 谢谢你 :) 我希望实现的服务器端是理想的。
    【解决方案2】:

    这里是 Tan javascript 答案的翻译 php 代码

    $input = '<a href="https://someurl.com/1001-web-file.pdf">1001-web-file</a>';
    preg_match('/href="(.+)\.pdf"/', $input, $m);
    $match = $m[1];
    $input = preg_replace('/(<a.*>).*(<\/a>)/', '$1<img src="'. $match .'-pdf-290x300.jpg">$2', $input);
    echo $input;
    

    【讨论】:

    • 这很完美!我想更好地理解这个解决方案的每个部分。 $m[1]; 完成了什么?我知道这是 $m 在它前面的行中设置的。 (&lt;a.*&gt;).*(&lt;\/a&gt;) 是如何工作的?我知道.* 匹配任何字符并且您正在使用它来重建HTML - 我如何添加即target="_blank"?感谢您的反馈:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 2012-06-05
    • 2021-09-20
    • 2018-04-29
    • 2014-06-27
    相关资源
    最近更新 更多