正则表达式没有获得特殊字符的完整链接

时间:2021-08-05 16:49:07

I am using this code:

我正在使用此代码:

$string = preg_replace("~(?!(?:https?://(?:www\.)?|www\.)(?:youtube\.com)(?:https?://(?:www\.)?|www\.)[\w./=?#-]+~i", '<a href="$0">$0</a>', $string);

So that I can turn the link beneath into a clickable link.

这样我就可以将下面的链接转换为可点击的链接。

http://upload.wikimedia.org/wikipedia/commons/f/f2/Bill_Clinton%2C_Yitzhak_Rabin,%2C_Yasser_Arafat_at_the_White_House_1993-09-13.jpg

This works for a part... It makes a link of http://upload.wikimedia.org/wikipedia/commons/f/f2/Bill_Clinton but the rest stays plain text. How can I make it work for the whole link? So you see a comma too... How can I make that a link?

这适用于一部分......它建立了http://upload.wikimedia.org/wikipedia/commons/f/f2/Bill_Clinton的链接,但其余部分保留纯文本。如何使其适用于整个链接?所以你也看到了一个逗号...我该如何建立一个链接?

1 个解决方案

#1


1  

Also I'm trying to account for punctuation at the end of a URL (so that we don't include it).

此外,我正在尝试在URL的末尾说明标点符号(以便我们不包括它)。

<?php

$string = "This works http://upload.wikimedia.org/wikipedia/commons/f/f2/Bill_Clinton%2C_Yitzhak_Rabin%2C_Yasser_Arafat_at_the_White_House_1993-09-13.jpg. This one should fail http://www.youtube.com/v/adlskdfjasopie. Although this one should fail as well http://youtu.be/adlkajdaslk.";

$string = preg_replace("~(?!(?:https?://(?:www\.)?|www\.)(?:youtu))(?:https?://(?:www\.)?|www\.)[^\s]+[^.!?,\<\]\[\)(]~i",'<a href="$0">$0</a>',$string);


?>

output

This works <a href="http://upload.wikimedia.org/wikipedia/commons/f/f2/Bill_Clinton%2C_Yitzhak_Rabin%2C_Yasser_Arafat_at_the_White_House_1993-09-13.jpg. ">http://upload.wikimedia.org/wikipedia/commons/f/f2/Bill_Clinton%2C_Yitzhak_Rabin%2C_Yasser_Arafat_at_the_White_House_1993-09-13.jpg. </a>This one should fail http://www.youtube.com/v/adlskdfjasopie. Although this one should fail as well http://youtu.be/adlkajdaslk.

#1


1  

Also I'm trying to account for punctuation at the end of a URL (so that we don't include it).

此外,我正在尝试在URL的末尾说明标点符号(以便我们不包括它)。

<?php

$string = "This works http://upload.wikimedia.org/wikipedia/commons/f/f2/Bill_Clinton%2C_Yitzhak_Rabin%2C_Yasser_Arafat_at_the_White_House_1993-09-13.jpg. This one should fail http://www.youtube.com/v/adlskdfjasopie. Although this one should fail as well http://youtu.be/adlkajdaslk.";

$string = preg_replace("~(?!(?:https?://(?:www\.)?|www\.)(?:youtu))(?:https?://(?:www\.)?|www\.)[^\s]+[^.!?,\<\]\[\)(]~i",'<a href="$0">$0</a>',$string);


?>

output

This works <a href="http://upload.wikimedia.org/wikipedia/commons/f/f2/Bill_Clinton%2C_Yitzhak_Rabin%2C_Yasser_Arafat_at_the_White_House_1993-09-13.jpg. ">http://upload.wikimedia.org/wikipedia/commons/f/f2/Bill_Clinton%2C_Yitzhak_Rabin%2C_Yasser_Arafat_at_the_White_House_1993-09-13.jpg. </a>This one should fail http://www.youtube.com/v/adlskdfjasopie. Although this one should fail as well http://youtu.be/adlkajdaslk.