在忽略DIV标记的同时截断URL

时间:2014-08-14 14:24:39

标签: regex preg-replace str-replace substr

我们使用以下代码在Wordpress网站页面的输出中显示值。但是,偶尔输出的时间太长,无法放入我们为其设置的框中,因此我们要截断它。

    $markup = str_replace('%%', get_post_meta($post_id, '_sf_submission_field_'.get_the_ID(), true), htmlspecialchars_decode(get_post_meta(get_the_ID(), 'markup', true)));

    $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $markup);
    $ret = ' ' . $text;
    $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);
    $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\" rel=\"nofollow\">\\2</a>", $ret);
    $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
    $ret = substr($ret, 1);

    echo $ret;

使用substr如下$ret = substr($ret, 0, 30);会很好,但是,输入字符串的一部分有样式div标签和其他不能被截断的文本。所以我的问题是如何截断JUST中包含URL的字符串部分......反过来不会截断href本身,因为它仍然需要是一个可点击的链接。

以下是输入字符串示例: <i class="icon-twitter-squared"></i> http://www.stackoverflow.com/reallylongurl

...我只想将http://www.stackoverflow.com/reallylongurl截断为www.stackoverfl... 例如 - 它需要保持可点击状态作为原始未截断的URL。

非常感谢您的建议!

1 个答案:

答案 0 :(得分:1)

更新:要获取不属于href的链接以及您在评论中询问的内容,您可以使用此正则表达式:

(?<!href=")https?://(.{9}).*?/\w+

<强> Working demo

enter image description here