2012-06-13 1 views
1

Мне нужна помощь с twitter хэштегом, мне нужно извлечь определенный хэштег в виде строковой переменной в PHP. До сих пор у меня этоИзвлечение хэштага Twitter из строки в PHP

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

но это только превращает hashtag_string в ссылку

+0

Вы хотите, чтобы получить хэштег или удалить его? Или оба? Все, что вы делаете, соответствует шаблону hashtag, а затем заменяется той же строкой. – Sp4cecat

+0

Вы просто заменяете хэштег на то же самое на самом деле ... – rayfranco

+0

Во-первых, 'preg_replace' делает то, что подразумевает это имя: * он заменяет что-то * ...' preg_match' более семантически подходит для того, что вы пытаетесь для достижения. Кроме того, будет легче помочь, если вы опубликуете базовый пример исходной строки, из которой вы выберете, и пример того, что именно вы хотите извлечь из этой исходной строки. – rdlowrey

ответ

7

Использование preg_match() идентифицировать хэш и захватить его переменной, например, так:

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

Demo

+0

Большое спасибо, это было полезно .. не отставайте от хорошей работы. мир –

1

Вы можете извлечь значение в строке с помощью preg_match function

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

preg_match будет хранить соответствующие результаты в массиве. Вы должны взглянуть на документ, чтобы посмотреть, как играть с ним.

1

Вот не Regex способ сделать это:

<?php 

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

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

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

echo $hashTag; 

Demo

Примечание: Это будет только пикап первый хэштегом в твиттере.

1

Я думаю, что эта функция поможет вам:

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; 
} 
2

Как я понимаю, вы говорите, что в текст/параграф/сообщение вы хотите показать тег диез (#), как это: - # тег и URL вы хотите, чтобы удалить знак #, потому что строка после # не отослана на сервер в запросе, так что я редактировал свой код и попробовать так: -

$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> 
+0

Спасибо, это изящный способ сделать это. –

+0

Приятно слышать это –

0

извлечь несколько хэштег в массив

$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); 
Смежные вопросы