Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从推文中查找URL、@回复和#标签_Php_Regex_Text_Twitter - Fatal编程技术网

Php 从推文中查找URL、@回复和#标签

Php 从推文中查找URL、@回复和#标签,php,regex,text,twitter,Php,Regex,Text,Twitter,我正在用PHP构建一个Twitter小东西,我正在尝试解析URL、@repress和#hashtags,并将它们变成可点击的链接 @repress将链接到 Hashtags希望 我发现了一个用于解析URL的类,我想知道这是否也可以用于解析@reply和#hashtags: // http://josephscott.org/archives/2008/11/makeitlink-detecting-urls-in-text-and-making-them-links/ class

我正在用PHP构建一个Twitter小东西,我正在尝试解析URL、@repress和#hashtags,并将它们变成可点击的链接

  • @repress将链接到
  • Hashtags希望
我发现了一个用于解析URL的类,我想知道这是否也可以用于解析@reply和#hashtags:

// http://josephscott.org/archives/2008/11/makeitlink-detecting-urls-in-text-and-making-them-links/    
class MakeItLink {
protected function _link_www( $matches ) {
    $url = $matches[2];
    $url = MakeItLink::cleanURL( $url );
    if( empty( $url ) ) {
        return $matches[0];
    }

    return "{$matches[1]}<a href='{$url}'>{$url}</a>";
}

public function cleanURL( $url ) {
    if( $url == '' ) {
        return $url;
    }

    $url = preg_replace( "|[^a-z0-9-~+_.?#=!&;,/:%@$*'()x80-xff]|i", '', $url );
    $url = str_replace( array( "%0d", "%0a" ), '', $url );
    $url = str_replace( ";//", "://", $url );

    /* If the URL doesn't appear to contain a scheme, we
     * presume it needs http:// appended (unless a relative
     * link starting with / or a php file).
     */
    if(
        strpos( $url, ":" ) === false
        && substr( $url, 0, 1 ) != "/"
        && !preg_match( "|^[a-z0-9-]+?.php|i", $url )
    ) {
        $url = "http://{$url}";
    }

    // Replace ampersans and single quotes
    $url = preg_replace( "|&([^#])(?![a-z]{2,8};)|", "&#038;$1", $url );
    $url = str_replace( "'", "&#039;", $url );

    return $url;
}

public function transform( $text ) {
    $text = " {$text}";

    $text = preg_replace_callback(
        '#(?<=[\s>])(\()?([\w]+?://(?:[\w\\x80-\\xff\#$%&~/\-=?@\[\](+]|[.,;:](?![\s<])|(?(1)\)(?![\s<])|\)))*)#is',
        array( 'MakeItLink', '_link_www' ),
        $text
    );

    $text = preg_replace( '#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $text );
    $text = trim( $text );

    return $text;
}
}
//http://josephscott.org/archives/2008/11/makeitlink-detecting-urls-in-text-and-making-them-links/    
类MakeItLink{
受保护的功能链接www($matches){
$url=$matches[2];
$url=MakeItLink::cleanURL($url);
if(空($url)){
返回$matches[0];
}
返回“{$matches[1]}”;
}
公共函数cleanURL($url){
如果($url=''){
返回$url;
}
$url=preg_replace(“|[^a-z0-9-~+.?#=!&;/:%@$*”()x80 xff]| i“,”$url);
$url=str_replace(数组(“%0d”,“%0a”),“”,$url);
$url=str_replace(“;/”,“:/”,$url);
/*如果URL似乎不包含方案,我们将
*假设它需要http://added(除非是亲戚
*以/或php文件开头的链接)。
*/
如果(
strpos($url,“:”)===false
&&substr($url,0,1)!=“/”
&&!preg|u match(“| ^[a-z0-9-]+?.php|i”,$url)
) {
$url=“http://{$url}”;
}
//替换符号和单引号
$url=preg_replace(“|&([^#])(?![a-z]{2,8};)|“,”&;$1“,$url);
$url=str_替换(“'”、“';”、$url);
返回$url;
}
公共功能转换($text){
$text=“{$text}”;
$text=preg\u replace\u回调(
“#(?)(\()([\w]+?:/(?:[\w\\x80-\\xff\\\\\\\$%&~/\-=?@\[\](+):(?![\s))]+?>([^>]+?)\i',“$1$3”,$text);
$text=修剪($text);
返回$text;
}
}

我认为您要做的基本上就是我在下面介绍的内容。您应该在
transform
方法中,在return语句之前添加这两条语句

$text = preg_replace('#@(\w+)#', '<a href="http://twitter.com/$1">$0</a>', $text);
$text = preg_replace('/#(\w+)/', '<a href="http://twitter.com/search?q=%23$1&src=hash">$0</a>', $text);
$text=preg#u replace('#@(\w+)#',''$text);
$text=preg#u replace(“/”(\w+/”,“$text”);
这就是你要找的吗?

Twitter可以开源和()实现他们用来查找用户名、哈希标记、列表和URL的代码


它非常面向正则表达式。

这里有问题吗?你对这段代码有问题吗?是的,这个类只解析链接,我也想解析@repress和#hashtags并将它们转换为link。我喜欢这个实现有多简单。更正!嗨@SoaperGEM,这没有考虑hashtags中的特殊字符,比如说,它不适用于#Prévoyance之类的词。有什么解决办法吗?