Zeid Selimovic
Zeid Selimovic

Reputation: 853

Extracting Twitter hashtag from string in PHP

I need some help with twitter hashtag, I need to extract a certain hashtag as string variable in PHP. Until now I have this

$hash = preg_replace ("/#(\\w+)/", "<a href=\"http://twitter.com/search?q=$1\">#$1</a>", $tweet_text);

but this just transforms hashtag_string into link

Upvotes: 5

Views: 15148

Answers (7)

Nageen
Nageen

Reputation: 1765

You can use preg_match_all() PHP function

preg_match_all('/(?<!\w)#\w+/', $description, $allMatches);

will give you only hastag array

preg_match_all('/#(\w+)/', $description, $allMatches);

will give you hastag and without hastag array

print_r($allMatches)

Upvotes: 2

Leong Chee Siong
Leong Chee Siong

Reputation: 66

Extract multiple hashtag to array

$body = 'My #name is #Eminem, I am rap #god, #Yoyoya check it #out';
$hashtag_set = [];
$array = explode('#', $body);

foreach ($array as $key => $row) {
    $hashtag = [];
    if (!empty($row)) {
        $hashtag =  explode(' ', $row);
        $hashtag_set[] = '#' . $hashtag[0];
    }
}
print_r($hashtag_set);

Upvotes: 3

Ravinder Payal
Ravinder Payal

Reputation: 3041

As i understand you are saying that in text/pargraph/post you want to show tag with hash sign(#) like this:- #tag and in url you want to remove # sign because the string after # is not sended to server in request so i have edited your code and try out this:-

$string="www.funnenjoy.com is best #SocialNetworking #website";    
$text=preg_replace('/#(\\w+)/','<a href=/hash/$1>$0</a>',$string);
echo $text; // output will be www.funnenjoy.com is best <a href=search/SocialNetworking>#SocialNetworking</a> <a href=/search/website>#website</a>

Upvotes: 3

Alvaro
Alvaro

Reputation: 526

I think this function will help you:

echo get_hashtags($string);



function get_hashtags($string, $str = 1) {
    preg_match_all('/#(\w+)/',$string,$matches);
    $i = 0;
    if ($str) {
        foreach ($matches[1] as $match) {
            $count = count($matches[1]);
            $keywords .= "$match";
            $i++;
            if ($count > $i) $keywords .= ", ";
        }
    } else {
        foreach ($matches[1] as $match) {
            $keyword[] = $match;
        }
        $keywords = $keyword;
    }
    return $keywords;
}

Upvotes: 3

Ayush
Ayush

Reputation: 42450

Here's a non Regex way to do it:

<?php

$tweet = "Foo bar #hashTag hello world";

$hashPos = strpos($tweet,'#');
$hashTag = '';

while ($tweet[$hashPos] !== ' ') {
 $hashTag .= $tweet[$hashPos++];
}

echo $hashTag;

Demo

Note: This will only pickup the first hashtag in the tweet.

Upvotes: 0

rayfranco
rayfranco

Reputation: 3690

You can extract a value in a string with preg_match function

preg_match("/#(\w+)/", $tweet_text, $matches);
$hash = $matches[1];

preg_match will store matching results in an array. You should take a look at the doc to see how to play with it.

Upvotes: 1

nickb
nickb

Reputation: 59709

Use preg_match() to identify the hash and capture it to a variable, like so:

$string = 'Tweet #hashtag';
preg_match("/#(\\w+)/", $string, $matches);
$hash = $matches[1];
var_dump( $hash); // Outputs 'hashtag'

Demo

Upvotes: 15

Related Questions