使用regex从字符串中修剪/删除/删除链接


Trim/erase/removal links from string with regex

我有一个很简单的问题,那就是……让我头疼…

我只是想修剪所有链接(www.link.com) (http://www.link.com) (http://link.com)…无论如何,从给定字符串中使用以下regex:

$regex = "(http|ftp|https):'/'/['w'-_]+('.['w'-_]+)+(['w'-'.,@?^=%&:/~'+#]*['w'-'@?^=%&/~'+#])?";

把它们变成空白。

这是我的实际代码,不能工作…

<?php
$string = 'ads dsa asd asd as da ds www.something.com adss dsad a sdas d';
$pattern = "(http|ftp|https):'/'/['w'-_]+('.['w'-_]+)+(['w'-'.,@?^=%&amp;/~'+#]*['w'-'@?^=%&amp;/~'+#])?";
$replacement = ' nothing ';
echo preg_replace($pattern, $replacement, $string);
?>

它一直在告诉我

    ( ! ) Warning: preg_replace() [function.preg-replace]: Unknown modifier ':' in C:'wamp'www'ceva.php on line 9
    Call Stack
    #   Time    Memory  Function    Location
    1   0.0005  363504  {main}( )   ..'ceva.php:0
    2   0.0005  363952  preg_replace ( )    ..'ceva.php:9
D

php中regex的模式需要用分隔符包围,以显示模式的开始和结束位置以及修饰符(不区分大小写,多行等)的开始位置。最常见的是,您将看到正斜杠作为分隔符,但大多数字符都可以使用。一个示例模式可能是:/pattern[a-z]*/i。请注意,第一个字符是正斜杠(/),模式本身以相同的字符(/)结束,之后只期望使用修饰符,如不区分大小写的i…等(参见:模式修饰符)。无论第一个字符是什么,都是分隔符,模式部分必须以与结束分隔符相同的字符结束。您看到的错误意味着您的第一个字符(一个开括号)是分隔符。下一个左括号之后的所有内容都应该是修饰符。该错误提示结束分隔符后存在无效修饰符。要解决这个问题,您应该能够在正则表达式周围放置一个分隔符,它应该可以工作。有关php正则表达式的一般参考,请参阅分隔符和。

编辑:我想知道为什么你得到一个错误关于冒号作为问题字符。显然,php还支持括号样式的分隔符,如{}。左括号是分隔符,右括号是结束分隔符。下面的字符应该是分隔符,当到达结束分隔符之后的第一个字符时,模式会抛出错误,因为冒号是无效的修饰符。直到。

看起来它对冒号不满意。尝试用反斜杠转义regex中的字符(将":"转换为"':")

这非常非常简单,但可能足够了,它只假设在链接

后面有一个空白
<?php
    $string = 'here goes 1 http://google.com and 2 http://www.google.com and also 3 www.google.com?q=asd& and thats it';
    $pattern = '/((http|ftp|https):'/'/(www'.)?|www'.)[^'s]*/';
    $return = preg_replace($pattern, '<link>', $string);
    var_dump($return);
?>

您忘记了正则表达式周围的分隔符:

代替:

$pattern = "(http|ftp|https):'/'/['w'-_]+('.['w'-_]+)+(['w'-'.,@?^=%&amp;/~'+#]*['w'-'@?^=%&amp;/~'+#])?";

试题:

$pattern = "/(http|ftp|https):'/'/['w'-_]+('.['w'-_]+)+(['w'-.,@?^=%&amp;'/~'+#]*['w'-@?^=%&amp;'/~+#])?/";

$pattern = "{(ftp|https?)://[-'w]+('.[-'w]+)+([-'w.,@?^=%&;/~+#]*[-'w@?^=%&;/~+#])?}";